引用类型篇
名称 | 描述 |
---|---|
强引用 | 最普通的引用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方法获得其指向的对象)。