繁体   English   中英

如何查看Java中垃圾收集的对象?

[英]How to see what objects have been garbage collected in Java?

请问,有没有办法获取在Java中垃圾收集的对象(它们的变量或至少是类名)的历史记录?

只需添加这些参数(到Oracle JVM)

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

没有以字节为单位提供任何其他内存。 这对我来说是非常有限的帮助。 感谢所有回复。

注意:添加finilize()方法的解决方法对我来说并不是一个不幸的选择(我无法访问它)。

您可以使用Objectfinalize方法。 当对象即将被GCed时调用此方法。 从这里,您可以记录您需要的信息。

免责声明:我的公司开发了我在这个答案中推荐的工具。

JProfiler中,您可以转到内存部分中的“已记录对象”视图,并将活动模式切换为垃圾回收对象(查看 - >更改活动模式 - >垃圾收集对象)。 然后,您将看到已经GCed的对象的统计信息。

在此输入图像描述

当对象实际被删除时, 弱引用幻像引用似乎对记录有用。 本文中 ,解释了该技术。

你在寻找内存泄漏吗?

如果你实现了finalize()方法(在每个Object中都可用),它将在对象被垃圾收集之前被调用 - 你可以在其中运行任何代码。

如果您正在寻找一个系统的解决方案(或者您无法访问要监视的类),我不知道有任何JVM选项允许这样做。 但是,您可以记录正在加载和卸载的类(GCed),但这不是您要求的。

JDK中有一个很好的内置工具,用于在运行时观察jvm。 这是jvisualvm。 屏幕截图有一个很好的参考: http//visualvm.java.net/description.html

这是其中之一: 在此输入图像描述

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM