Java的GC什么时候回收垃圾

在 Java,C#等语言中,比较主流的判定一个对象已死的方法是:1. 可达性分析析(Reachability Analysis)。
1.所有生成的对象都是一个称为“GC Roots”的根的子树。从GC Roots开始向下搜索,搜索所经过的路径称为引用链,当一个对象到GC Roots没有任何用链可以到达时,就称这个对象是不可引用的,也就被GC回收了。
2.无论是引用计数器还是可达性分析,判定对象是否存活都与引用有关!那么,如何定义对象的引用呢?
当内存空间还够时,能够保存在内存中;如果进行了垃圾回收之后内存空间仍旧非常紧张,则可以跑出这些对象,所以根据不同的需求,给出引用类型的不同,GC回收时也会有不同的操作:
a) 强引用(Strong Reference):Object obj = new Object();只要强引用还存在,GC 永远不会回收掉被引用的对象。
b) 软引用(Soft Reference):描述一些还有用但非必需的对象。在系统将会发生内存溢出之前,会把这些对象列入 回收范围进行二次回收(即系统将会发生内存溢出了,才会对他们进行回收。)
c) 弱引用(Weak Reference):程度比软引用还要弱一些。这些对象只能生存到下次 GC 之前。当 GC 工作时,无论内 存是否足够都会将其回收(即只要进行 GC,就会对他们进行回收。)
d) 虚引用(Phantom Reference):一个对象是否存在虚引用,完全不会对其生存时间构成影响

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值