小编Dib*_*ndu的帖子

当实际对象被垃圾回收时,WeakHashMap 中条目中的值如何被垃圾回收?

首先,我想澄清我对 的理解,WeakReference因为以下问题取决于相同。

static void test() {
    Person p = new Person();
    WeakReference<Person> person = new WeakReference<>(p);
    p = null;
    System.gc();
    System.out.println(person.get());
    System.out.println(person);
}

static class Person {
    String name;
}

static class PersonMetadata {
    String someData;

    public PersonMetadata(String met) {
        someData = met;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是

null java.lang.ref.WeakReference@7852e922

这意味着虽然有一个实际的 person 对象在 GC 运行时被垃圾收集,但是WeakReference<Person>内存中存在一个类的对象,此时它不指向任何东西。

现在考虑到上述理解是正确的,我对它的WeakHashMap<K,V>工作原理感到困惑。在下面的代码中

public static void main(String[] args) {
    Person p = new Person();
    p.name = "John";
    WeakHashMap<Person, PersonMetadata> map = new WeakHashMap<>(); …
Run Code Online (Sandbox Code Playgroud)

java collections garbage-collection weak-references weakhashmap

6
推荐指数
1
解决办法
437
查看次数