Java:weakhashmap如何确定密钥是否"过时"?

pet*_*ter 0 java weakhashmap

它是如何知道这个钥匙已经老了并准备把它扔掉了?为什么字符串文字?

例如,

  private static WeakHashMap<<? extends Object>, String> m = 
                             new WeakHashMap<<? extends Object>, String>();

  public static void A(){

       Point p = new Point();
       m.put(p, "a");

  }
Run Code Online (Sandbox Code Playgroud)

这是否意味着一旦A()返回,'p'键就会消失?

Lou*_*man 5

WeakHashMap没有做出那个决定; 相反,普通的Java垃圾收集过程会删除未引用的密钥.p一旦触发Java垃圾收集,密钥就会消失.

什么WeakHashMap做的是它使用弱引用来引用键,所以垃圾收集知道不计较WeakHashMap到地图键引用为"持有",在内存中的关键对象.

  • 这与`WeakHashMap`有什么关系?弱引用只关心引用相等,所以`new String("something")`将得到GC'd与``something``分开,但这就是为什么`String`通常不适合用于`WeakHashMap的部分原因`关键. (2认同)