Java规范规定,在清除幻像引用本身之前,不会释放幻像引用的对象。
我的问题是:此功能(对象未解除分配)的用途是什么?
(我提出的唯一想法是允许本机代码对对象进行事后清理,但这并不是很有说服力)。
发布于 2019-03-21 08:02:46
我能想到的唯一一个可以防止重新分配的好用例是某种JNI实现的异步数据源写入引用的对象,必须告诉它要停下来 - 停止写入对象 - 在记忆被回收之前。如果允许先前的释放,则一个简单的忘记处置()错误可能导致内存损坏。
这是过去使用finalize()的情况之一,并可能引发了一些问题。
发布于 2019-03-21 09:40:25
我认为这个想法是让其他对象在原始对象之外进行额外的清理。例如,如果原始对象无法扩展以实现某些终结内容,则可以使用幻像引用。
更大的问题是JVM不能保证一个对象永远不会被最终确定,并且我认为不能保证幻像引用能够在完成后完成它们的事情。
https://stackoverflow.com/questions/-100001013
复制相似问题