package org.example;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws Exception {
test1();
test2();
test3();
}
private static void test1() throws Exception {
System.out.println("-----test1-----");
Map<WeakReference<Integer>, WeakReference<Integer>> map = new HashMap<>();
WeakReference<Integer> key = new WeakReference<>(666);
WeakReference<Integer> value = new WeakReference<>(777);
map.put(key, value);
System.out.println(key);
System.out.println(map.get(key));
System.out.println(map.get(key).get());
}
private static void test2() throws Exception {
System.out.println("-----test2-----");
Map<WeakReference<Integer>, WeakReference<Integer>> map = new HashMap<>();
WeakReference<Integer> key = new WeakReference<>(666);
WeakReference<Integer> value = new WeakReference<>(777);
map.put(key, value);
Thread.sleep(1000);
System.gc();
System.out.println(key);
System.out.println(map.get(key));
System.out.println(map.get(key).get());
}
private static void test3() throws Exception {
System.out.println("-----test3-----");
Map<WeakReference<Integer>, Integer> map = new HashMap<>();
WeakReference<Integer> key = new WeakReference<>(666);
Integer value = 777;
map.put(key, value);
Thread.sleep(1000);
System.gc();
System.out.println(key);
System.out.println(map.get(key));
}
}
/*
java.lang.ref.WeakReference@7c30a502
java.lang.ref.WeakReference@49e4cb85
777
-----test2-----
java.lang.ref.WeakReference@2133c8f8
java.lang.ref.WeakReference@43a25848
null // 可见value如果为弱引用,gc后,就没值了
-----test3-----
java.lang.ref.WeakReference@3ac3fd8b
777 // value只要不为弱引用,gc后,虽然key.get()为null,但是key不是null,所以,值还是能正常获得的
总结:弱引用就是发生gc,那么弱引用引用的对象就被回收掉
*/
理解弱引用
最新推荐文章于 2024-07-09 16:46:46 发布