JVM 垃圾回收 引用类型

判断对象可否回收

引用计数算法

  • 过程:给对象添加一个引用计数器,每当被引用时,计数器值加一;引用失效时,值减一。当计数器值为0时,该对象就不会再被使用。

  • 缺陷:虽然实现起来简单,并且效率也较高,但是**很难解决对象间相互引用的问题。**因此主流Java虚拟机不选用引用计数算法来管理内存。

可达性分析算法

Java虚拟机中的垃圾回收器采用可达性分析来探索存活的对象

  • 过程:扫描堆中的对象,沿着**GC Roots对象为起点的引用链**上是否有该对象,如果没有,说明该对象可以被回收

引用类型

1.强引用 2.软引用 3.弱引用 4.虚引用 5.终结器引用

1.强引用

代码中普遍存在(最常见)的引用方式。

特点:被强引用关联的对象不会被回收

Object obj = new Object()
2.软引用

特点:被软引用关联的对象只有在内存不够的情况下才会被回收。

使用 SoftReference类来创建软引用。

Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
obj = null;  // 使对象只被软引用关联
3.弱引用

特点:被弱引用关联的对象一定会被回收,也就是说它只能存活到下一次垃圾回收发生之前。

使用WeakReference类来实现弱引用。

Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj);
obj = null;
4.虚引用

又称为幽灵引用或者幻影引用。

特点:一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用取得一个对象。

为一个对象设置虚引用关联的唯一目的就是能在这个对象被回收时收到一个系统通知。

使用PhantomReference类来实现虚引用。

Object obj = new Object();
PhantomReference<Object> pf = new PhantomReference<Object>(obj);
obj = null;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值