问题标签 [heap-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 内存管理、堆损坏和 C++
所以,我需要一些帮助。我正在使用 C++ 开发一个项目。但是,我想我已经设法破坏了我的堆。这是基于我将 an 添加std::string
到一个类并为它分配另一个值的事实std::string
:
我的系统因堆栈转储而崩溃。所以基本上我需要停下来检查我所有的代码和内存管理的东西,找出我搞砸的地方。代码库仍然很小(大约 1000 行),所以这很容易做到。
尽管如此,我还是对这种东西感到头疼,所以我想我会把它扔在那里。我在 Linux 系统上使用valgrind
,虽然不完全知道我在做什么,但它确实报告了std::string
' 的析构函数是无效的。我不得不承认从谷歌搜索中得到了“堆损坏”这个词;任何关于这类东西的通用文章也将不胜感激。
(在之前rm -rf ProjectDir
,在 C# 中再次执行:D)
编辑:我还没有说清楚,但我要的是诊断这类内存问题的建议。我知道 std::string 的东西是正确的,所以这是我做过的事情(或者是一个错误,但 Select 没有问题)。我确信我可以检查我编写的代码,你们非常聪明的人很快就会发现问题,但我想将这种代码分析添加到我的“工具箱”中,就像它一样。
c++ - 如何防止在堆上创建对象?
有谁知道我可以如何在独立于平台的 C++ 代码中阻止在堆上创建对象?也就是说,对于“Foo”类,我想阻止用户这样做:
并且只允许他们这样做:
有没有人有任何想法?
干杯,
java - 如何处理“java.lang.OutOfMemoryError: Java heap space”错误?
我正在Java 5上编写客户端Swing应用程序(图形字体设计器)。最近,我遇到了错误,因为我对内存使用不保守。用户可以打开无限数量的文件,程序将打开的对象保存在内存中。经过快速研究,我发现5.0 Java 虚拟机中的人体工程学和其他人在 Windows 机器上说 JVM 默认最大堆大小为.java.lang.OutOfMemoryError: Java heap space
64MB
鉴于这种情况,我应该如何处理这种约束?
我可以使用java 的命令行选项来增加最大堆大小,但这需要找出可用的 RAM 并编写一些启动程序或脚本。此外,增加到某个有限的最大值并不能最终解决这个问题。
我可以重写我的一些代码以频繁地将对象持久保存到文件系统(使用数据库是同一件事)以释放内存。它可以工作,但它可能也有很多工作。
如果您能指出上述想法的细节或一些替代方案,如自动虚拟内存、动态扩展堆大小,那就太好了。
java - 在 HP-UX 环境 JVM 中,C 堆与 Java 堆中运行的是什么?
我在 HP-UX 环境中遇到了某些 Java 应用程序的特殊问题。
堆设置为 -mx512,但是,使用 gpm 查看此 java 进程的内存区域,它显示它使用了 1.6GB 的 RSS 内存,其中 1.1GB 分配给了 DATA 区域。在 24-48 小时内快速增长,然后大幅放缓,仍然每隔几个小时增长 2MB。但是,Java 堆没有泄漏的迹象。
好奇这是怎么可能的,我研究了一下,发现了这篇关于 java 堆和 c 堆内存泄漏的 HP 文章:http: //docs.hp.com/en/JAVAPERFTUNE/Memory-Management.pdf
我的问题是什么决定了在 C 堆和 java 堆中运行的内容,对于不通过 java 堆运行的东西,您将如何识别在 C 堆上运行的那些对象?此外,Java 堆是否位于 C 堆内?
memory-management - 堆栈和堆是什么以及在哪里?
编程语言书籍解释了值类型是在堆栈上创建的,而引用类型是在堆上创建的,但没有解释这两个东西是什么。我还没有阅读对此的明确解释。我明白什么是堆栈。但,
- 它们在哪里,是什么(物理上在真实计算机的内存中)?
- 它们在多大程度上受操作系统或语言运行时的控制?
- 他们的范围是什么?
- 是什么决定了它们每个的大小?
- 是什么让一个更快?
memory - VS2005:限制堆大小
VS2005 C++ 编译器标志是否像 Xmx???M java 标志这样我可以限制在 Windows 上运行的应用程序的堆大小。
我需要限制堆大小,以便填充内存以找出当前的空闲内存。(代码也在嵌入式系统上运行,这是获取内存使用情况的最佳方法)
javac - 如何在 Borland JBuilder 2005/2006 中增加 javac 进程的最大堆大小
在大多数现代 IDE 中,您可以设置一个参数以确保 javac 获得足够的堆内存来进行编译。由于不值得在这里讨论的原因,我们暂时与 JBuilder 2005/2006 相关联,而且源代码的数量似乎已经超过了 javac 可以处理的数量。
请保留特定于 JBuilder 2005/2006 javac 的答案(我们现在无法迁移,并且 Borland Make 编译器不正确支持 Java 1.6)
我意识到应该如何以及应该将哪些参数传递给 javac,问题是 IDE 似乎不允许在任何地方设置这些参数。很多配置都隐藏在 Jbuilder Install\bin*.config 文件中,我觉得答案可能在某个地方,但还没有找到。
ruby - 有没有办法从正在运行的 ruby 进程中转储内存中的对象?
在获取此信息的同时终止进程会很好。
c# - 带委托的局部变量
这显然不是一个最佳实践。有人可以解释为什么这不是最佳实践或它是如何工作的吗?任何提供解释的书籍或文章将不胜感激。
输出的值是第二个值"Modified"。编译器魔术的哪一部分使这项工作起作用?这就像跟踪堆上的值并稍后再次检索它一样简单吗?
[编辑]:鉴于一些评论,改变原句一些......
performance - 如何避免堆碎片?
我目前正在从事一个需要大量内存的医学图像处理项目。我可以做些什么来避免堆碎片并加快对已加载到内存中的图像数据的访问?
该应用程序是用 C++ 编写的,可在 Windows XP 上运行。
编辑:应用程序对图像数据进行一些预处理,如重新格式化、计算查找表、提取感兴趣的子图像......在处理过程中应用程序需要大约 2 GB RAM,其中大约 1.5 GB 可以使用为图像数据。