public static void main(String[] args) { SoftReference<byte[]> sr = new SoftReference<>(new byte[1024 * 1024 * 10]); System.out.println(sr.get()); System.gc(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(sr.get()); byte[] b = new byte[1024*1024*12]; System.out.println(sr.get()); }
执行gc之后,软引用仍然没有被回收. 但是分配强引用之后,软引用就被回收掉了.
应用场景: 缓存场景, 内存充足时,不会回收;一旦空间不足,会把软引用回收掉;
弱引用:
一旦gc,直接被垃圾回收
应用场景: ThreadLocal