如何判断Java对象的内存何时发布?

Shi*_*zam 6 java memory

我有一个Swing浏览器应用程序,其中有一个错误,当我向GUI添加/删除内存时,没有为这些对象释放内存,而我正在尝试追踪保留它们的内容.问题是我不知道如何判断什么东西实际上已从内存中完全释放.

有没有办法判断对象是否已从内存中释放?我已经习惯了Objective-C,有几种方法可以讲述.

谢谢

Noo*_*z42 6

你不能用Java真正做到这一点.所有提到终结者的答案都不是你所追求的.

您可以做的最好的事情是在ReferenceQueue中将PhantomReference入队并进行轮询,直到您获得引用.

final ReferenceQueue rq = new ReferenceQueue();
final PhantomReference phantom = new PhantomReference( referenceToObjectYouWantToTrack, rq );
Run Code Online (Sandbox Code Playgroud)

你想在这里阅读Peter Kofler的答案(它解释了PhantomReference是什么):

你有没有在任何项目中使用Phantom参考?

非常有趣的读到这里:

http://www.kdgregory.com/index.php?page=java.refobj

基本上,我在一个项目中使用PhantomReference,在安装软件时需要计算一次非常特殊的缓存.为了有效地计算这个(基于磁盘的)缓存,需要大量的内存(越多越好).当释放大量内存时,我正在使用PhantomReference跟踪"几乎完全".