Java 查看垃圾收集的变量
我想知道在我的程序中垃圾收集的所有变量以及垃圾收集的顺序。有没有一种简单的方法可以做到这一点:Java 查看垃圾收集的变量,java,garbage-collection,Java,Garbage Collection,我想知道在我的程序中垃圾收集的所有变量以及垃圾收集的顺序。有没有一种简单的方法可以做到这一点: class GarbageUtility { public static void main(String args[]) { int a =10; int b = a; int c = a + b; System.out.println(a); } } 您可以查看com.sun.management.GarbageCo
class GarbageUtility {
public static void main(String args[]) {
int a =10;
int b = a;
int c = a + b;
System.out.println(a);
}
}
您可以查看
com.sun.management.GarbageCollectionNotificationInfo
,请参阅
此外,这篇文章还介绍了一种为hashmaps制作gc检测器的方法
我想知道在我的程序中垃圾收集的所有变量以及垃圾收集的顺序。有没有一种简单的方法可以做到这一点:
class GarbageUtility {
public static void main(String args[]) {
int a =10;
int b = a;
int c = a + b;
System.out.println(a);
}
}
int
,并且int
不是对象/引用类型。它们甚至不会受到垃圾收集器的影响脚注:
- 如果声明一个
方法,当GC检测到对象没有对is的强、软或弱引用时,将调用该方法。。。垃圾收集迫在眉睫。使用finalize()
对象及其关联队列可以获得类似的效果。但是请注意,这也可能会改变相应对象的生存期。。。使他们比其他人活得更长Reference
- 您可能能够通过外部调试器或探查器代理检测到要进行垃圾收集的对象。(我对此不确定。我实际上认为无法访问的对象对代理是不可见的。)
- 堆栈变量(即方法参数和局部变量)不存储在GC管理的空间中。任何引用位于(活动)堆栈变量中的对象都不会被垃圾收集
- 实例变量(类声明的实例字段)是相应对象的一部分。当对象被垃圾收集时,变量“消失”
- 静态变量(由类声明的静态字段)通常在应用程序的生命周期内保持不变。然而,在某些情况下,类可能被垃圾收集,如果发生这种情况,它的静态变量将同时消失
请注意,
GarbageCollectionNotificationInfo
告诉您GC已经收集了某个堆,并提供了一些基本统计信息,例如GC花费了多长时间以及前后堆中的可用空间
我看不出这有助于您判断特定对象是否已被垃圾收集以及何时发生。您认为拥有这些信息有助于解决的技术问题是什么?“我想知道垃圾收集的所有变量是什么”最简单的方法是将每个对象的弱引用放入列表中。然后重新查看列表,您知道对象为
null
的引用已被收集。当然,这只是开玩笑。您的示例中没有任何显式对象,因此您知道没有创建对象,因此没有对象被收集。实际上,很可能调用了Integer.toString()来创建一个对象。谢谢,GarbageCollectionNotificationInfo就是我要找的。如何?我不认为它能满足你的需求。