Java中的四种引用
Java中四种引用类型:强引用,软引用,弱引用,强引用
强引用
通过new 去进行创建的对象的引用
通过手动调用gc,并且将引用赋值为null进行回收
软引用
软引用就是把对象用SoftReference包裹一下,当我们需要从软引用对象获得包裹的对象,只需要get一下就好了
SoftReference<TestQuote> testQuoteSoftReference = new SoftReference<>(new TestQuote()); TestQuote testQuote = testQuoteSoftReference.get(); System.out.println(testQuote);
软引用的特点是:
当内存不足,会触发JVM的GC,如果GC后,内存还是不足,就会把软引用包裹的对象给清除,也就是当JVM的内存不足的时候,才会回收该对象。
弱引用
弱引用的使用和软引用类型,只是关键字变成了WeakReference:
WeakReference<byte[]> weakReference = new WeakReference<>(new byte[1024*1024*10]); System.out.println(weakReference.get());
内存还是很足够的时候,但是触发了GC,资源还是内存回收了
虚引用
ReferenceQueue queue = new ReferenceQueue(); PhantomReference<byte[]> reference = new PhantomReference<>(new byte[1],queue); System.out.println(reference.get());
当发生GC,虚引用就会被回收,并且会把回收的通知放到ReferenceQueue中。