安全点与安全区域

安全点是线程状态确定的代码位置,允许JVM进行如GC的操作。线程通过轮询标志在安全点主动挂起。G1收集器的STW在安全点触发。安全区域则考虑了线程可能无法响应中断的情况,保证在SafeRegion内任何地方开始GC都是安全的。
摘要由CSDN通过智能技术生成

安全点就是指代码种的一些特定位置,当线程运行到这些位置时它的状态是确定的,这样JVM就可以安全进行一些操作,比如GC等,所以GC不是想什么时候执行就立即触发,是需要等待所有线程运行到安全点后才能触发。

这些特定的安全点位置主要有以下几种:

  • 方法返回之前
  • 调用某个方法之后
  • 抛出异常的位置
  • 循环的末尾

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

以G1收集器回收过程为例,可以看出每次发生STW时,都是在安全点时真正触发。

 

安全区域又是什么?

Safe Point是对正在执行的线程设的。

如果一个线程处于Sleep或中断状态,它就不能响应JVM的中断请求,再运行到Safe Point上。

因此JVM引入了Safe Region

Safe Region是指一段代码片段中,引用关系不会发生变化。这个区域内的任意地方开始GC都是安全的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值