java中的对象分为四种引用,由强到弱依次是:强引用、软引用、弱引用、虚引用。
一、强引用
在我们日常编写程序中,所写的代码基本都是强引用。对于一个强引用的对象,即便抛出OutOfMemoryError,GC也不会强引用的对象进行回收操作,可谓与天同寿。
二、软引用
如果一个对象拥有软引用,内存足够的情况下并不会被GC回收,当内存不足时,GC会扫描然后回收软引用对象的内存,软引用可以用来实现内存敏感的高速缓存。
三、弱引用
对于弱引用来说,无论内存是否充足,只要被GC扫描到了,就会对弱引用的对象进行回收操作。软引用和弱引用的区别在于: 弱引用的对象拥有更短暂的生命周期。软引用和弱引用可以结合引用队列使用,当引用的对象被GC回收之后,将该引用加入引用队列中。但是注意,在软引用和弱引用中,引用队列不是必须的,而在虚引用中则是必须的。
四、虚引用
虚引用顾名思义,就是形同虚设,虚引用并不会影响对象的生命周期。虚引用与软引用以及弱引用的区别在于:虚引用必须和引用队列结合使用。GC在回收一个虚引用对象之前,会将虚引用加入到引用队列中。那么程序就可以从引用队列中,来判断引用的对象是否将要被垃圾回收。
版权声明:本文为jwrt1998原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。