JAVA中的四种引用类型

引用类型篇

名称 描述
强引用 最普通的引用Object o = new Object();
软引用 垃圾回收器,内存不够的时候回收(缓存)
弱引用 垃圾回收器看见就会回收(防止内存泄漏)
虚引用 垃圾回收器看见二话不说就回收,跟没有一样(管理堆外内存)DirectByteBuffer -> 应用到NIO Netty

1、强引用

Java中默认的引用类型,一个对象如果具有强引用那么只要这种引用还存在就不会被GC。

2、软引用

简言之,如果一个对象具有弱引用,在JVM发生OOM之前(即内存充足够使用),是不会GC这个对象的;只有到JVM内存不足的时候才会GC掉这个对象。软引用和一个引用队列联合使用,如果软引用所引用的对象被回收之后,该引用就会加入到与之关联的引用队列中。

3、弱引用

如果一个对象只具有弱引用,那么这个对象就会被垃圾回收器GC掉(被弱引用所引用的对象只能生存到下一次GC之前,当发生GC时候,无论当前内存是否足够,弱引用所引用的对象都会被回收掉)。弱引用也是和一个引用队列联合使用,如果弱引用的对象被垃圾回收期回收掉,JVM会将这个引用加入到与之关联的引用队列中。若引用的对象可以通过弱引用的get方法得到,当引用的对象呗回收掉之后,再调用get方法就会返回null。

4、虚引用

虚引用是所有引用中最弱的一种引用,其存在就是为了将关联虚引用的对象在被GC掉之后收到一个通知。(不能通过get方法获得其指向的对象)。

上一篇:JVM GC(垃圾回收篇)


下一篇:OutOfMemoryError异常总结