Java:具有弱引用的堆栈
在Java中,有一种称为WeakHashMap的数据结构,它将弱引用存储为键。无论何时从内存中取出弱引用,都会从映射中删除条目
如果我有一个存储弱引用的数据结构(如堆栈或集合),当弱引用从内存中取出时,它们的条目是否会自动删除强>
下面是存储弱引用的堆栈示例
Stack<WeakReference<Object>> objStack = new Stack<WeakReference<Object>>();
你可以在下面搜索框中键入要查询的问题!
在Java中,有一种称为WeakHashMap的数据结构,它将弱引用存储为键。无论何时从内存中取出弱引用,都会从映射中删除条目
如果我有一个存储弱引用的数据结构(如堆栈或集合),当弱引用从内存中取出时,它们的条目是否会自动删除强>
下面是存储弱引用的堆栈示例
Stack<WeakReference<Object>> objStack = new Stack<WeakReference<Object>>();
# 1 楼答案
迟做总比不做好
这不是弱引用的工作方式。
WeakReference
-对象将始终存在,但其get()
-方法可能返回原始对象或null
(如果原始对象是GC:ed)这意味着您的堆栈将始终包含
WeakReference
-对象这是一个冗长的测试,但是它取决于在中间做GC的JVM,它可能发生或可能不会发生在命令上。如果不发生,尝试添加更多的^ {CD5>}:S:
输出:
最好的方法可能是忽略
get()
一旦“弹出”就返回null
的条目旁注:我的第一个测试是使用一个字符串对象,它从未得到GC:ed。这是因为Java中的字符串是“interned”(参见
String.intern()
),这意味着存在一个可重用的静态字符串的隐藏缓存。字符串永远不会被GC:ed,除非字符串池已满(或沿着该行的某个东西…)我认为字符串是唯一具有这种“特殊”特性的Java对象,但我建议在WeakReference中始终使用定制对象,以确保它正确地得到GC:ed# 2 楼答案
对。你所描述的是弱引用的一般属性,而不是
WeakHashMap
特定属性从the API