代码中的内存泄漏问题

时间:2014-04-29 07:34:02

标签: java multithreading memory-leaks

我正在开发一个应用程序&我的代码出现内存不足错误。我无法看到代码的内存利用率。所以我很困惑,看看。

在我的小分析之后,我开始知道有私人静态对象正在创建&在该类的构造函数中。正在创建更多对象。 &安培;那个班是多线程的..

所以我想知道,因为静态对象没有得到垃圾收集..所有与构造函数相关的对象都不会被垃圾收集?

3 个答案:

答案 0 :(得分:1)

仅在卸载类时才收集静态引用,这仅在不再使用类加载器时发生。如果您还没有多个类加载器,则可能永远不会卸载(直到您的程序停止)

然而,仅仅因为一个对象曾被静态引用并没有改变它的收集方式。如果您有一个对象的静态引用,并且不再具有对该对象的引用,则将正常收集它。

拥有多个线程可以使查找错误更加困难,但它也不会改变对象的收集方式。

您需要对应用程序进行内存转储,并了解内存的构建原因。您保留的对象可能都是必需的。在这种情况下,你需要

  • 减少内存需求
  • 增加你的最大记忆力。

答案 1 :(得分:0)

您可能没有内存泄漏 - 您可能只是超出了系统可以提供的可用内存量。 你可以添加几个JVM参数来限制分配给运行时环境的RAM的大小,并控制垃圾收集器 - 权衡是它通常消耗更多的CPU。

答案 2 :(得分:0)

你说你无法看到内存利用率吗?

您是否尝试过使用JVisualVM(在$ JAVA_HOME / bin / jvisualvm中) 它应该能够附加到本地进程并进行堆转储。

此外,Eclipse Memory Analyzer有一些很好的报告供后续分析