JVM学习笔记-垃圾回收之安全点与安全区域

安全点

  1. 程序只有在特定位置才能进行GC,这些位置被称为安全点。
  2. 安全点的选定基本上是以程序“是否具有让程序长时间执行的特征”为标准进行选定的(方法调用、循环跳转、异常跳转等)
  3. 安全点太少可能导致GC等待时间太长,太频繁会影响系统性能。
  4. 如何判断发生GC时所有线程是否都在安全点上
    - 主动式中断:设置一个中断标志,当线程走到此位置时,判断标志是否为真,如果为真则将自己挂起等待GC
    - 抢先式中断:当GC发生时中断全部线程来判断是否都在安全点上,恢复不在安全点上的线程让他跑到安全点上(没有虚拟机使用这种方式,太暴力)

安全区域

  1. 安全区域的存在是为了解决线程一直未进入安全点(sleep或block状态时,JVM不能唤醒线程让其走到安全点)
  2. 安全区域是指在一段代码中,对象的引用的关系未发生变法,在这个区域内的任何时候进行GC都是安全的
  3. 实际执行时
    - 当进入安全区域时,标识线程已经进入安全区域,如果这段时间内发生GC,则JVM会忽略这个标识
    - 当即将退出安全区域时,还未发生GC,则等待JVM发出可以推出安全区域的信号才能继续退出。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值