Java引用

Java引用分为强引用、软引用、弱引用、虚引用。

强引用:是指在代码中普遍存在的,类似“Object obj = new Object()”这类的引用,只要强引用存在,当内存不足发生GC时,宁抛出内存溢出异常,也不会回收被强引用的对象。

软引用:是用来描述一些还有用但并非必需的对象。系统将要发生内存溢出异常之前,会把软引用关联的对象列进回收范围进行第二次回收,如果这次回收还没有足够内存,才会抛出内存溢出异常。内存够用时不会被GC。使用SoftReference类实现软引用。适合做缓存。

下例中gc之后,root.get()不为null。


软引用

弱引用:也是描述非必需对象,比软引用弱。弱引用的对象只能生存到下一次GC之前。当发生GC时,无论内存是否足够,弱引用关联的对象都会被回收。使用WeakReference类实现弱引用。可用于缓存,Java中WeakHashMap运用了弱引用。

下例中发生gc后,root.get()为null。

弱引用

虚引用:也称幽灵引用或幻影引用。对象是否有虚引用,不会对其生存时间有影响,也不能通过虚引用取得对象的实例(它的get()方法总为null)。为对象设置虚引用关联唯一的目的就是在这个对象被激励回收器回收时收到一个系统通知。下次GC时会回收虚引用的对象。使用PhantomReference类实现。


参考:

《深入理解JVM》

https://www.jianshu.com/p/7200da8b043f  

你可能感兴趣的:(Java引用)