Java 找出垃圾回收器正在释放的对象:

Java 找出垃圾回收器正在释放的对象:,java,garbage-collection,Java,Garbage Collection,我试图在一个我没有设计的程序中发现内存泄漏(我是这个项目的新手)。由于这是一个相当大的程序,我遇到了一些麻烦。我尝试了一些探查器,其中大多数在尝试跟踪分配堆栈跟踪以查看哪些对象占用了所有内存时挂起或崩溃 我正在运行System.gc(),并试图找出它到底在释放/释放什么。从分析器中,我可以看到它正在发布,但我需要知道它正在发布什么 是否有某种方法可以在运行时从垃圾收集器获取有关它正在释放/释放哪些对象的信息 如果不是,或者如果这是一种不好的方法,甚至考虑尝试这样做,任何其他建议都将受到欢迎。我首

我试图在一个我没有设计的程序中发现内存泄漏(我是这个项目的新手)。由于这是一个相当大的程序,我遇到了一些麻烦。我尝试了一些探查器,其中大多数在尝试跟踪分配堆栈跟踪以查看哪些对象占用了所有内存时挂起或崩溃

我正在运行
System.gc(),并试图找出它到底在释放/释放什么。从分析器中,我可以看到它正在发布,但我需要知道它正在发布什么

是否有某种方法可以在运行时从垃圾收集器获取有关它正在释放/释放哪些对象的信息


如果不是,或者如果这是一种不好的方法,甚至考虑尝试这样做,任何其他建议都将受到欢迎。

我首选的查找内存泄漏的方法是通过等待堆转储发生(在OOM之后)来触发堆转储使用
-XX:+HeapDumpOnOutOfMemoryError
作为JVM启动参数,或使用jsconsole/jmap“按需”启动

然后运行(通常较大的)转储文件,使其通过优秀的MAT

我首选的查找内存泄漏的方法是,使用
-XX:+heapdumponootfmemoryError
作为JVM启动参数等待堆转储发生(在OOM之后),或者使用jsconsole/jmap“按需”触发堆转储

然后运行(通常较大的)转储文件,使其通过优秀的MAT

我会使用内存探查器查找内存泄漏。您可以从VisualVM开始。这可能会发现您的问题,但如果它不尝试像YourKit这样的商业分析器的评估版本


这些工具不仅可以告诉您要丢弃什么,还可以告诉您首先要创建什么。它有一个图形界面,因此您可以看到最大或最多的内存。我会使用内存探查器查找内存泄漏。您可以从VisualVM开始。这可能会发现您的问题,但如果它不尝试像YourKit这样的商业分析器的评估版本


这些工具不仅可以告诉您要丢弃什么,还可以告诉您首先要创建什么。它有一个图形界面,因此您可以看到最大的或最多的对象。

我不知道System.gc()将实现哪个对象的确切解决方案

但是JAVA为JAVA监控和管理控制台提供了内置的GUI工具功能

您在java/bin文件夹中找到jconsole来运行它:use命令

cd $JAVA_HOME/bin
./jconsole

我没有System.gc()将实现哪个对象的精确解

但是JAVA为JAVA监控和管理控制台提供了内置的GUI工具功能

您在java/bin文件夹中找到jconsole来运行它:use命令

cd $JAVA_HOME/bin
./jconsole

探查器是您所需要的。找一个有效的。或者找出你尝试的那些失败的原因。你需要一个分析器。找一个有效的。也可以通过另一个eclipse插件“TPTP”进行内存分析。内存分析也可以由另一个eclipse插件“TPTP”完成。这些分析器看起来比我用过的要好得多。谢谢这些分析器看起来比我用过的要好得多。谢谢