Water2Wine

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Java对象引用类型

强引用

软引用

弱引用

虚引用

强引用

根对象直接引用的对象就被称为强引用。

常见的根对象包括Universe相关对象,本地方法创建的全局对象,方法栈中的对象等等

软引用&弱引用

  • 相同点
    都是没有被根对象直接引用的对象;都可以和引用队列联合使用,当软/弱引用所引用的对象被垃圾回收时,JVM就会把这个弱引用加入到与之关联的引用队列中

  • 不同点
    垃圾回收时,如果没有强引用直接引用的话,弱引用会直接被垃圾回收;软引用在内存不足时会被回收

  • 常用场景
    比如某些数组申请内存过大,如果不回收的话会始终占用大量内存资源,那么就可以使用软引用&弱引用,在内存过大时自动回收,等到在需要的时候再开辟内存

API:

软引用:SoftReference

弱引用:WeakReference

引用队列:ReferenceQueue

虚引用

如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。

虚引用主要用来跟踪对象被垃圾回收的活动,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。

程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

posted on 2020-05-05 22:24  Water2Wine  阅读(252)  评论(0编辑  收藏  举报