Java引用类型
强引用
Object o=new Object();//强引用
在JVM进行GC的时候,只要对象有强引用与其关联,就绝对不会对它进行回收,即使已经内存不足了也不会收回有强引用指向的对象。
如果你不需要使用某个对象了,可以将相应的引用设置为null,消除强引用来帮助垃圾回收器进行回收。
软引用
SoftReference<String> sr = new SoftReference<String>(new String("abc"));
System.out.println(sr.get());
System.gc(); //通知JVM的gc进行垃圾回收
System.out.println(sr.get());
如果内存空间足够,垃圾回收器就不会回收这个对象,但如果内存空间不足了,它就会被回收
弱引用
WeakReference<String> sr = new WeakReference<String>(new String("abc"));
System.out.println(sr.get());
System.gc(); //通知JVM的gc进行垃圾回收
System.out.println(sr.get());
发生GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收
应用场景:ThreadLocal.ThreadLocalMap.Entry实现
虚引用
当发生GC,虚引用就会被回收,并且会把回收的通知放到ReferenceQueue中
应用场景:DirectByteBuffer清除堆外缓存
以上简单记录下,更加详细的信息,可以移步这位大佬的博库深入解读