天天看点

java的4种引用类型

StrongReference(强引用)

写法:

Test test = new Test()

这是最常见的引用类型,也是最牢固的引用类型,当jvm发生gc时,对象被引用不会被gc回收,jvm内存满了将要发生OOM(out of memory)的时候,强引用类型也不会被回收

SoftReference(软引用)

写法:

SoftReference<String> softReference = new SoftReference<>(new String("Hello World"));

较强引用来说,软引用在发生gc时,被引用的对象不会被回收,当内存满时,将要发生OOM时,gc会回收软引用的对象

WeakReference(弱引用)

写法:

WeakReference<String> weakReference = new WeakReference<>(new String("Hello World"));

弱引用在发生gc时,就会被gc回收,不管内存用了多少,弱引用最长的生命周期是两次gc的间隔时间

PhantomReference(虚引用,幻引用)

写法:

ReferenceQueue<String> referenceQueue = new ReferenceQueue<>(); PhantomReference<String> phantomReference = new PhantomReference<>(new String("Hello World"), referenceQueue);

虚引用和上面两种引用有一点点小区别,多了一个依赖队列。虚引用并不会决定对象的生命周期,有他没他都一个样,无法通过虚引用获取对象。