JVM强软弱虚
强引用:
定义:
在程序中通过 Object obj = new Object();这种方式创建的 obj 对象对于 new Object()来说就是强引用;只要obj的强引用还在new Object()就不会被垃圾回收;
软引用:
定义:
软引用是用来描述一些有用但不是非必须存在的数据,在程序中可以使用SoftReference对象来实现软引用:
jdk1.2之前:
软引用在GC时会将软引用的对象列入可回收范围,但并不会直接回收,只有当GC后发现内存还是不足时,会发起二次GC回收软引用的对象;
JDK1.31之后 JVM引入了 参数 -XX:SoftRefLRUPolicyMSPerMB默认为10ms(每MB堆内存空间对应的软引用对象最大存活时间,单位是毫秒),意思是当即使在内存不足
也需要满足
当前时间戳 - 软引用最新时间戳 <= 空闲内存 * SoftRefLRUPolicyMSPerMB默认时间
多久未被使用时间 <= 最少存活时间
当前时间戳-软引用最新时间戳 表示软引用对象多久没被使用了,
空闲内存 * SoftRefLRUPolicyMSPerMB默认时间 计算出软引用最少可以存活多少时间
当 没被时间时间 大于 最少存活时间时,标识对象可被回收
二次GC时回收软引用对象也需要保证软连接对象存活最少 (空闲空间 * SoftRefLRUPolicyMSPerMB )时间, 比如空闲时间10M 则软连接对象最少存活 10 * 10 = 100s才可以被回收
弱引用:
定义:
- 弱引用用来描述一些非必须的对象, 比软引用更弱, 当GC时如果不存在弱引用之外的强引用那么弱引用对象一定会被回收
- 可以通过对象WeakReference对象来描述弱引用
虚引用:
定义:
虚引用(Phantom Reference)是Java中四种引用类型中最弱的一种,通常用于在对象被垃圾回收器回收之前,进行一些必要的清理工作。
虚引用与其他三种引用类型不同的是,它并不会影响对象的生命周期。也就是说,无论是否有虚引用指向一个对象,该对象都可能被垃圾回收器回收。
虚引用通常用于跟踪对象被垃圾回收器回收的状态。在Java中,可以通过创建一个虚引用对象,并将其与一个目标对象关联,当垃圾回收器准备回收该目标对象时,会将该虚引用插入到一个引用队列中,通知应用程序进行必要的清理工作。