我有一个Swing浏览器应用程序,带有一个错误,当我在GUI中添加/从GUI中删除时,这些对象的内存没有释放,而我正试图查找持有它们的原因。问题是我不知道如何分辨什么时候实际上已经从内存中完全释放了。
有没有办法判断对象是否已从内存中释放?我习惯了用Objective-C讲几种方法。
谢谢
最佳答案
您实际上无法使用Java做到这一点。所有提到终结器的答案实际上都不是您想要的。
最好的办法是将PhantomReference排队到ReferenceQueue中并进行轮询,直到获得引用为止。
final ReferenceQueue rq = new ReferenceQueue();
final PhantomReference phantom = new PhantomReference( referenceToObjectYouWantToTrack, rq );
您想在这里阅读Peter Kofler的答案(它解释了PhantomReference是什么):
Have you ever used Phantom reference in any project?
非常有趣的阅读这里:
http://www.kdgregory.com/index.php?page=java.refobj
基本上,我在一个项目中使用了PhantomReference,在该项目中,安装软件后,一次需要计算一种非常特殊的缓存。为了有效地计算此(基于磁盘的)缓存,需要巨大的内存量(越多越好)。当释放大量内存时,我正在使用PhantomReference来“几乎精确地”跟踪。