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