【发布时间】:2019-07-24 08:14:12
【问题描述】:
在下面的代码中 nameRef.get() 是 null ,在 name = null 和 System.gc() 之后。
import java.lang.ref.WeakReference;
public class Main {
public static void main(String[] args) {
String name = new String("ltt");
WeakReference<String> nameRef = new WeakReference<>(name);
System.out.println(nameRef.get()); // ltt
name = null;
System.gc();
System.out.println(nameRef.get()); // null
}
}
WeakHashMap 基于 WeakReference。最后我想map.size()会是0,其实是1。
import java.util.WeakHashMap;
public class Main2 {
public static void main(String[] args) {
String name = new String("ltt");
WeakHashMap<String, Integer> map = new WeakHashMap<>();
map.put(name, 18);
System.out.println(map.size()); // 1
name = null;
System.gc();
System.out.println(map.size()); // it's 1. why not 0 ?
}
}
Java WeakHashMap 何时会清理null 键?
【问题讨论】:
-
这是一个常见的误解,但
System.gc()不会强制进行垃圾回收。
标签: java garbage-collection weak-references weakhashmap