如何查看在Java中垃圾收集了哪些对象?

如何查看在Java中垃圾收集了哪些对象?,java,garbage-collection,Java,Garbage Collection,请问,有没有办法获取Java中已被垃圾收集的对象(其变量或至少类名)的历史记录 只需添加这些参数(到Oracle JVM) 不提供任何其他字节内存。对我的帮助非常有限。谢谢大家的回复 注意:不幸的是,add finilize()方法的变通方法不是我的选择(我没有访问权限)。您可以使用对象中的finalize方法。当对象即将进行GCD时,将调用此方法。从这里,您可以记录所需的信息。您正在搜索内存泄漏吗 如果实现finalize()方法(可在每个对象中使用),它将在垃圾收集对象之前被调用,并且您可以

请问,有没有办法获取Java中已被垃圾收集的对象(其变量或至少类名)的历史记录

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

不提供任何其他字节内存。对我的帮助非常有限。谢谢大家的回复


注意:不幸的是,add finilize()方法的变通方法不是我的选择(我没有访问权限)。

您可以使用
对象中的
finalize
方法。当对象即将进行GCD时,将调用此方法。从这里,您可以记录所需的信息。

您正在搜索内存泄漏吗

如果实现
finalize()
方法(可在每个
对象中使用)
,它将在垃圾收集对象之前被调用,并且您可以运行其中的任何代码


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

免责声明:我的公司开发了我在回答中推荐的工具

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


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

以下是其中之一:


希望这会有所帮助。

或者在对象实际被删除时记录日志似乎很有用。jprofiler是一个非常强大且常用的工具,但它只对开源软件免费,单实例的标准许可证要花500美元。对于某些项目来说,这可能是个问题。我知道并使用VisualVM,但它不支持查看垃圾收集的对象。这是一个有用的工具,但它不能满足这一特殊需要。谢谢。JProfiler看起来棒极了,但是450欧元太贵了。有没有办法以编程方式列出这些类?我正在查看java.lang.Management包,但它只能返回count。你是说在JProfiler或JDK MBean中?如何从JVM开始记录内存用户界面强迫我点击一个按钮,但我的程序只运行5分钟seconds@Hurda在启动配置文件会话时显示的对话框中,可以配置初始录制配置文件。
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps