在 java 中,有没有办法检查一个对象如何仍然可以从垃圾收集根访问?
In java, is there a way to examine how an object is still reachable from garbage collection root?
代码库有些复杂,所以我想知道是否有一种工具可以在运行时检查对象并确定 JVM 如何仍将此对象视为可访问。
特别是,有一种对象类型我希望在应用程序的整个生命周期中一次只能是一个实例(可以创建新实例,但发生这种情况时旧实例应该被垃圾回收) .但是,当我检查堆时,我发现此对象类型的多个实例正在累积。 class 非常复杂,因此追踪仍然引用旧对象实例的内容相当耗时。有谁知道 java 中的工具或方法来弄清楚为什么无法收集这些对象?
JProfiler有这样的观点:可以一直追踪引用对象直到根。
而且它还有很多其他有用的调试视图,所以我一直认为它物有所值。
代码库有些复杂,所以我想知道是否有一种工具可以在运行时检查对象并确定 JVM 如何仍将此对象视为可访问。
特别是,有一种对象类型我希望在应用程序的整个生命周期中一次只能是一个实例(可以创建新实例,但发生这种情况时旧实例应该被垃圾回收) .但是,当我检查堆时,我发现此对象类型的多个实例正在累积。 class 非常复杂,因此追踪仍然引用旧对象实例的内容相当耗时。有谁知道 java 中的工具或方法来弄清楚为什么无法收集这些对象?
JProfiler有这样的观点:可以一直追踪引用对象直到根。
而且它还有很多其他有用的调试视图,所以我一直认为它物有所值。