Java引用类型

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清除堆外缓存

以上简单记录下,更加详细的信息,可以移步这位大佬的博库深入解读