Java Finalize()方法是否忽略映射/列表中的对象?
尽管Java Finalize()方法是否忽略映射/列表中的对象?,java,Java,尽管对象存在于列表或映射中,但是否可以调用对象的finalize()方法。如果没有,那么如何检测对象除了在列表/映射中存在外,其他任何东西都无法访问该对象 这背后的原因是我有一个map,它有一个键UUID,它是对象的唯一ID,作为map的值。我需要知道地图上的“值”对象何时不再可访问,以便我可以清理空间,因为将有很多对象,但我还需要在地图中放置它们,直到它们不再可在其他任何地方访问,以便我可以在需要时通过它们的UUID检索它们 非常感谢您的帮助,谢谢 首先,如果你有 Map<K,V>
对象
存在于列表
或映射
中,但是否可以调用对象
的finalize()
方法。如果没有,那么如何检测对象
除了在列表
/映射
中存在外,其他任何东西都无法访问该对象
这背后的原因是我有一个map,它有一个键UUID
,它是对象的唯一ID,作为map
的值。我需要知道地图上的“值”对象何时不再可访问,以便我可以清理空间,因为将有很多对象,但我还需要在地图中放置它们,直到它们不再可在其他任何地方访问,以便我可以在需要时通过它们的UUID
检索它们
非常感谢您的帮助,谢谢 首先,如果你有
Map<K,V> map = new HashMap<>();
map.put(key,value);
但是,请注意,如果您的值对象仍然从另一个引用引用,它将不会被垃圾收集。所以希望这能有所帮助
如果您的目的是实现一个缓存,以确保您不会使用太多的信息,那么您可能需要查看Guava的缓存。如果您想要或/和对象的过期时间,它具有内存限制 这正是我要找的东西。非常感谢。
Map<K,WeakReference<V>> map = ...
map.put(key, new WeakReference<V>(v));
if (map.get(key).get()==null){
//object was garbage collected
}