1
6
关于内存中对象的一般信息,我建议您查看jvisualvm(它位于JDK的bin文件夹中)。它有很多关于VM在程序运行时做什么的有用信息,包括关于各种对象和内存状态的信息。 如果您想要更具体的东西,可以使用WeakReferences和ReferenceQueues。如果您只对少数类型的对象感兴趣,那么此选项可能是可行的。您可以在使用公共引用队列创建对象时创建对对象的WeakReference,然后让另一个线程定期检查队列(请注意,队列仅表示对象是可访问的,而不是实际收集的):
|
2
3
|
3
2
就在GC收集对象之前调用对象类的finalize方法。重写类中的方法,如下所示:
请注意,使用此方法只能监视自己的类。因此,由于String是最后一个类,因此不能用这种方法监视String对象。 |
4
0
我知道这不是你想解决问题的方法,但它可能还是有用的。 您可以通过重写finalize方法在自己的对象上捕获事件。它不能100%保证对象将被垃圾收集,因为它可以创建对自身的引用,但这只是一个开始。 this article 这是一个相当不错的GC教程。 |
5
0
我不太清楚你为什么要知道这些。大多数人想知道这一点,以确定他们是否有内存泄漏(在java中,这意味着通过保持对对象的引用来保持对象的活动性。 Netbeans 有很好的工具来查看任何java应用程序的内存使用情况(也包括那些不从netbeans运行的应用程序!)它们可以告诉您已经收集了多少对象,内存使用情况,以及更多有用的统计信息。 |
6
0
不 GCed,而不是检查哪些对象得到GCed。 要检查哪些对象是GCed,您可以随时使用任何探查器,如Jprofiler等。 |