JAVA对象——强引用,弱引用,软引用,虚引用

在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用,称为引用类型。

强引用

指向对new出来的对象的引用一般就是强引用;当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会随意回收具有强引用的对象来解决内存不足问题。

弱引用

通过WeakReference类实现,如ThreadLocal中的Entry的实现;弱引用对象存活的生命周期很短,当GC线程扫描时如果发现对象只剩下弱引用了,无论内存是否够用都会把这个对象进行回收。

软引用

软引用通过SoftReference类实现。 软引用的生命周期比强引用短一些。只有当 JVM 认为内存不足时,才会去试图回收软引用指向的对象:即JVM 会确保在抛出 OutOfMemoryError 之前,清理软引用指向的对象。

虚引用

虚引用也叫幻象引用,通过PhantomReference类来实现。无法通过虚引用访问对象的任何属性或函数。幻象引用仅仅是提供了一种确保对象被 finalize 以后,做某些事情的机制。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中

猜你喜欢

转载自blog.csdn.net/qq_29569183/article/details/115089079