尽管finalize()
或Object
中存在Object
,但仍可以调用List
的{{1}}方法。如果不是,除了仅在Map
/ Object
中存在外,如何检测List
何时不再可访问。
这背后的原因是我的地图的密钥为Map
,这是UUID
&{39}的唯一ID Object
&#39 ; s值。我需要知道"值"地图的对象不再可访问,因此我可以清除空间,因为会有很多对象,但我还需要在地图中将它们放在地图上,直到它们在其他任何地方都无法访问,这样我就可以通过{{1在需要时。
非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
好吧,首先,如果你有
Map<K,V> map = new HashMap<>();
map.put(key,value);
并且仍然引用了地图,然后仍然引用了值(通过地图)。所以它不会被垃圾收集。
如果您希望将值收集到垃圾中,您可能需要考虑阅读WeakReference What is the difference between a soft reference and a weak reference in Java?;
这样你可以拥有
Map<K,WeakReference<V>> map = ...
map.put(key, new WeakReference<V>(v));
通过这种方式,您可以使用UUID
来获取值,只需map.get(key)
,但该值也可以进行垃圾回收,您可以通过
if (map.get(key).get()==null){
//object was garbage collected
}
但是,请注意,如果仍然从另一个引用引用了您的值对象,则不会对其进行垃圾回收。希望对此有所帮助。
如果您的目的是实现一个缓存,确保您不使用太多信息,您可能需要查看Guava的缓存。如果你想要或者和/和对象的到期时间,它有一个内存绑定。 http://www.baeldung.com/guava-cache