[英]How to see what objects have been garbage collected in Java?
请问,有没有办法获取在Java中垃圾收集的对象(它们的变量或至少是类名)的历史记录?
只需添加这些参数(到Oracle JVM)
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
没有以字节为单位提供任何其他内存。 这对我来说是非常有限的帮助。 感谢所有回复。
注意:添加finilize()方法的解决方法对我来说并不是一个不幸的选择(我无法访问它)。
您可以使用Object
的finalize
方法。 当对象即将被GCed时调用此方法。 从这里,您可以记录您需要的信息。
免责声明:我的公司开发了我在这个答案中推荐的工具。
在JProfiler中,您可以转到内存部分中的“已记录对象”视图,并将活动模式切换为垃圾回收对象(查看 - >更改活动模式 - >垃圾收集对象)。 然后,您将看到已经GCed的对象的统计信息。
你在寻找内存泄漏吗?
如果你实现了finalize()
方法(在每个Object
中都可用),它将在对象被垃圾收集之前被调用 - 你可以在其中运行任何代码。
如果您正在寻找一个系统的解决方案(或者您无法访问要监视的类),我不知道有任何JVM选项允许这样做。 但是,您可以记录正在加载和卸载的类(GCed),但这不是您要求的。
JDK中有一个很好的内置工具,用于在运行时观察jvm。 这是jvisualvm。 屏幕截图有一个很好的参考: http : //visualvm.java.net/description.html
这是其中之一:
希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.