我正在开发一个应用程序&我的代码出现内存不足错误。我无法看到代码的内存利用率。所以我很困惑,看看。
在我的小分析之后,我开始知道有私人静态对象正在创建&在该类的构造函数中。正在创建更多对象。 &安培;那个班是多线程的..
所以我想知道,因为静态对象没有得到垃圾收集..所有与构造函数相关的对象都不会被垃圾收集?
答案 0 :(得分:1)
仅在卸载类时才收集静态引用,这仅在不再使用类加载器时发生。如果您还没有多个类加载器,则可能永远不会卸载(直到您的程序停止)
然而,仅仅因为一个对象曾被静态引用并没有改变它的收集方式。如果您有一个对象的静态引用,并且不再具有对该对象的引用,则将正常收集它。
拥有多个线程可以使查找错误更加困难,但它也不会改变对象的收集方式。
您需要对应用程序进行内存转储,并了解内存的构建原因。您保留的对象可能都是必需的。在这种情况下,你需要
答案 1 :(得分:0)
您可能没有内存泄漏 - 您可能只是超出了系统可以提供的可用内存量。 你可以添加几个JVM参数来限制分配给运行时环境的RAM的大小,并控制垃圾收集器 - 权衡是它通常消耗更多的CPU。
答案 2 :(得分:0)
你说你无法看到内存利用率吗?
您是否尝试过使用JVisualVM(在$ JAVA_HOME / bin / jvisualvm中) 它应该能够附加到本地进程并进行堆转储。
此外,Eclipse Memory Analyzer有一些很好的报告供后续分析