JVM的Stop-The-World与safepoint

JVM为什么需要Stop-The-World?

上一篇Java虚拟机面试准备(二)垃圾收集算法和垃圾收集器中介绍了判断对象是否存活需要进行可达性分析,此时可能其它进程已经更新对象的引用,那么可能出现误报和漏报,误报问题不大,可以进行下一次回收,漏报则是漏了可达对象,造成将非垃圾对象标注了垃圾,可能是虚拟机崩溃.所以为了避免漏报,需要STOP THE WORLD.

何时 STOP THE WORLD ?

STOP THE WORLD是通过safepoint机制来实现的,当JVM收到STOP THE WORLD请求时,JVM开始进行safepoint检查,当到达safepoint时开始挂起线程.JVM会等待所有线程到达safepoint,此时就完成STOP THE WORLD.GC线程开始可达性分析操作.

那什么是safepoint?

safepoint是指执行一段字节码,Java虚拟机 堆栈状态不会发生变化的稳定状态的一个点.

对解释执行,JVM每执行一次就执行一次safepoint检测,字节码之间皆可作为安全点.

对编译执行,会在编译成机器码时插入safepoint.会在所有方法的返回之前,以及所有非counted loop的循环(无界循环)回跳之前放置一个safepoint.具体参考JVM源码分析之安全点safepoint.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞翔的咩咩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值