糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > GC 疑难情况问题排查与分析(下篇)

GC 疑难情况问题排查与分析(下篇)

时间:2023-10-31 12:23:51

相关推荐

GC 疑难情况问题排查与分析(下篇)

Weak、Soft 及 Phantom 引用

另一类影响 GC 的问题是程序中的 non-strong 引用。虽然这类引用在很多情况下可以避免出现 OutOfMemoryError,但过量使用也会对 GC 造成严重的影响,反而降低系统性能。

弱引用的缺点

首先,弱引用(weak reference)是可以被 GC 强制回收的。当垃圾收集器发现一个弱可达对象(weakly reachable,即指向该对象的引用只剩下弱引用)时,就会将其置入相应的 ReferenceQueue 中,变成可终结的对象。之后可能会遍历这个 reference queue,并执行相应的清理。典型的示例是清除缓存中不再引用的 KEY。

当然,在这个时候我们还可以将该对象赋值给新的强引用,在最后终结和回收前,GC 会再次确认该对象是否可以安全回收。因此,弱引用对象的回收过程是横跨多个 GC 周期的。

实际上弱引用使用的很多。大部分缓存框架都是基于弱引用实现的,所以虽然业务代码中没有直接使用弱引用,但程序中依然会大量存在。

其次,软引用(soft reference)比弱引用更难被垃圾收集器回收。回收软引用没有确切的时间点,由 JVM 自己决定。一般只会在即将耗尽可用内存时,才会回收软引用,以作最后手段。这意味着可能会有更频繁的 Full GC,暂停时间也比预期更长,因为老年代中的存活对象会很多。

最后,使用虚引用(phantom reference)时,必须手动进行内存管理,以标识这些对象是否可以安全地回收。表面上看起来很正常,

如果觉得《GC 疑难情况问题排查与分析(下篇)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。