
2020-12-01:java中,什么是安全点和安全区域?
发布日期:2021-05-04 20:00:25
浏览次数:22
分类:精选文章
本文共 621 字,大约阅读时间需要 2 分钟。
福哥答案2020-12-04:
安全点
用户线程暂停,GC 线程要开始工作,但是要确保用户线程暂停的这行字节码指令是不会导致引用关系的变化。所以 JVM 会在字节码指令中,选一些指令,作为“安全点”,比如方法调用、循环跳转、异常跳转等,一般是这些指令才会产生安全点。 为什么它叫安全点,是这样的,GC 时要暂停业务线程,并不是抢占式中断(立马把业务线程中断)而是主动是中断。 主动式中断是设置一个标志,这个标志是中断标志,各业务线程在运行过程中会不停的主动去轮询这个标志,一旦发现中断标志为 True,就会在自己最近的“安全点”上主动中断挂起。安全区域
为什么需要安全区域? 要是业务线程都不执行(业务线程处于 Sleep 或者是 Blocked 状态),那么程序就没办法进入安全点,对于这种情况,就必须引入安全区域。 安全区域是指能够确保在某一段代码片段之中, 引用关系不会发生变化,因此,在这个区域中任意地方开始垃圾收集都是安全的。我们也可以把安全区城看作被扩展拉伸了的安全点。 当用户线程执行到安全区域里面的代码时,首先会标识自己已经进入了安全区域,这段时间里 JVM 要发起 GC 就不必去管这个线程了。 当线程要离开安全区域时,它要 JVM 是否已经完成了(根节点枚举,或者其他 GC 中需要暂停用户线程的阶段) 1、如果完成了,那线程就当作没事发生过,继续执行。 2、否则它就必须一直等待, 直到收到可以离开安全区域的信号为止。发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月01日 09时50分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
编写测试用例的实用小技巧
2019-03-03
数据结构与算法学习1-----稀疏数组
2019-03-03
焦点事件
2019-03-03
web前端面试一从输入url到看到页面发生了什么
2019-03-03
2018年年终总结
2019-03-03
监控264后缀文件播放
2019-03-03
R3 PRO 3200G和r7 3700u 哪个好
2019-03-03
【Docker&ARM】ARM架构服务器上docker的安装
2019-03-03
php--自定义错误处理函数的使用方法
2019-03-03
php--匿名函数的使用
2019-03-03
php--json_decode
2019-03-03
php--class的工厂模式的示例
2019-03-03
jQuery练习t81
2019-03-03
jQuery练习t85
2019-03-03
python36+centos7离线安装tensorflow与talib的方法
2019-03-03
isnull与isna的区别
2019-03-03
python自带超参调优包
2019-03-03
CentOS 8 已下载ntpdate 却无法使用crond进行时间同步
2019-03-03
ElasicJob分布式定时任务
2019-03-03