我有一个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来“几乎精确地”跟踪。

09-26 20:58