我一直在用多个模块处理Java上的这个项目。从很长一段时间以来,我偶尔会收到"java:内存不足“错误!我对这个“流行的”错误非常陌生,我想知道通用方法来解决这些错误。
此外,是否有业界接受的标准工具来帮助找出这些错误的原因?
我的项目中的模块包括来自第三方(使用web服务)的每分钟multi-threading轮询,以及其他内容。然而,这只是一个指针,我寻求的是一种一般的方法,而不是对我的项目非常具体的东西。
谢谢。
发布于 2012-04-28 20:46:56
有时,您只需要使用大量内存的类,就需要增加堆大小,或者制定一个更节省空间的算法。其他情况下,这是一个漏洞,您需要尊重对象。
jvisualvm
(它包含在JDK中)。发布于 2012-04-28 20:26:52
此外,是否有业界接受的标准工具来帮助找出这些错误的原因?
是的,有一些内存分析器,如VisualVM和YourKit。我广泛地使用后者,用于CPU和内存分析,并发现它非常有用。要了解它的功能,请看一下这个页面:链接。
发布于 2012-04-28 20:28:29
如果不能增加可用内存,就必须减少消耗。
不要保留对执行时不需要的对象的引用(就像数据可以动态加载一样),如果必要的话,重新设计流程(例如,不要并行地处理所有对象并按顺序进行处理),以便在那时需要更少的内存。垃圾收集应该为您完成剩下的工作。
特别是如果您将大数据对象加载到内存中,请考虑在可能的情况下使用流方法。如果你想搜索整个文件,你就不需要把它加载到内存中。你可以直接踩过去。
除了架构问题之外,您还可能会有泄漏:保持对不再需要的对象的无意引用。由于它们被引用,垃圾收集器无法释放内存,因此在某个时候内存不足。这可能是OutOfMemoryExceptions的第一个原因,它通常与static
引用有关,因为类和static
s在第一次接触类后通常不是卸货。互联网上有许多关于查找/修复这些问题的文章,例如如何修复Java中的内存泄漏
我知道的一个工具是垫子
https://stackoverflow.com/questions/10367193
复制相似问题