java——强引用、软引用、弱引用、虚引用区别

我自己的理解:

其实 ,这个就是针对java的对象,每个对象都在堆上都占有自己的内存空间

然后,关键是垃圾回收机制什么时候回收这个对象。(为什么要被回收,是因为每个应用程序的内存有限)

分情况考虑:

1.强引用:

当这个对象被强引用时,就算出现空间内存不足,也要出现oom的情况

2.软引用:

当这个对象被软引用时,一般垃圾回收器不会管它,但是出现空间内存不足,就要被回收。

3.弱引用:

当这个对象被弱引用时,一般还没有出现空间内存不足的情况时,如果垃圾回收器线程扫描到它,就会被回收。

4.虚引用:

当这个对象仅仅被虚引用时,该对象可以在任何时候被垃圾回收。

虚引用主要是用来跟踪对象被垃圾回收的活动。

虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用。

当一个对象被回收时,如果发现还有一个虚引用,在回收该对象前,就要把这个虚引用加入到与之相关的引用队列中。

程序通过了解该引用队列,可以判断该对象是否被回收。相当于日志追踪。

原文地址:https://www.cnblogs.com/gengen1990/p/6568409.html