安全点和安全区域

安全点:

在程序执行过程中发生fullGC时,虚拟机并不是立即将所有线程挂起开始进行fullGC。而是需要等待所有线程执行到某些特定的位置才可以进行fullGC,这些位置就称为安全点;

实现思想是当垃圾收集需要中断线程的时候,不直接对线程操作,仅仅设置一个标志位, 各个线程执行过程 时会不停地主动去轮询这个标志, 一旦发现中断标志为真时就自己在最近的安全点上主动中断挂起。

轮询标志的地方和安全点是重合的。

这些特定的安全点位置主要有以下几种:
1. 方法返回之前
2. 调用某个方法之后
3. 抛出异常的位置
4. 循环的末尾
 

安全区域:

Safe Region如上图的BC段,该代码片段中,引用关系不会发生变化。在这个区域内的任意地方开始 GC 都是安全的。这样的区域称为安全区域。
如: 一个线程处于 Sleep 或中断状态,因为它不能响应 JVM 的中断请求,再运行到 Safe Point 上。
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值