首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java:内存不足错误的一般方法

java:内存不足错误的一般方法
EN

Stack Overflow用户
提问于 2012-04-28 20:18:36
回答 5查看 4.4K关注 0票数 2

我一直在用多个模块处理Java上的这个项目。从很长一段时间以来,我偶尔会收到"java:内存不足“错误!我对这个“流行的”错误非常陌生,我想知道通用方法来解决这些错误。

此外,是否有业界接受的标准工具来帮助找出这些错误的原因?

我的项目中的模块包括来自第三方(使用web服务)的每分钟multi-threading轮询,以及其他内容。然而,这只是一个指针,我寻求的是一种一般的方法,而不是对我的项目非常具体的东西。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-28 20:46:56

有时,您只需要使用大量内存的类,就需要增加堆大小,或者制定一个更节省空间的算法。其他情况下,这是一个漏洞,您需要尊重对象。

  1. 运行jvisualvm (它包含在JDK中)。
  2. 连接到您的进程,如果可以的话尝试重新创建内存不足的错误,同时监视堆的大小。
  3. 当内存变大时执行堆转储。按大小搜索最大的对象--这通常会给您带来罪魁祸首类。
  4. 查看依赖项,查看保存引用的内容。如果是内存泄漏,请确保取消对不需要的对象的引用。
票数 3
EN

Stack Overflow用户

发布于 2012-04-28 20:26:52

此外,是否有业界接受的标准工具来帮助找出这些错误的原因?

是的,有一些内存分析器,如VisualVMYourKit。我广泛地使用后者,用于CPU和内存分析,并发现它非常有用。要了解它的功能,请看一下这个页面:链接

票数 2
EN

Stack Overflow用户

发布于 2012-04-28 20:28:29

如果不能增加可用内存,就必须减少消耗。

不要保留对执行时不需要的对象的引用(就像数据可以动态加载一样),如果必要的话,重新设计流程(例如,不要并行地处理所有对象并按顺序进行处理),以便在那时需要更少的内存。垃圾收集应该为您完成剩下的工作。

特别是如果您将大数据对象加载到内存中,请考虑在可能的情况下使用流方法。如果你想搜索整个文件,你就不需要把它加载到内存中。你可以直接踩过去。

除了架构问题之外,您还可能会有泄漏:保持对不再需要的对象的无意引用。由于它们被引用,垃圾收集器无法释放内存,因此在某个时候内存不足。这可能是OutOfMemoryExceptions的第一个原因,它通常与static引用有关,因为类和statics在第一次接触类后通常不是卸货。互联网上有许多关于查找/修复这些问题的文章,例如如何修复Java中的内存泄漏

我知道的一个工具是垫子

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10367193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档