Safepoint 是 JVM 中线程可安全暂停的特定位置,用于保障 GC 可达性分析等 STW 操作的准确性,并支撑类重定义、偏向锁撤销、反优化及线程诊断等运行时服务,通过协作式轮询机制实现,避免强制中断。

Java 虚拟机中的 Safepoint 是线程可以安全暂停的特定位置,核心作用是让 JVM 在需要全局一致状态时,可靠、可控地执行关键操作,而不是粗暴中断线程。
垃圾回收(尤其是可达性分析)必须确保对象图不被应用线程(mutator)并发修改。Safepoint 提供了“所有线程都停在已知、稳定状态”的窗口:栈帧结构清晰、寄存器和堆中引用关系确定、没有中间态数据。只有这时,GC 才能准确标记存活对象,避免误回收或漏回收。
不只是 GC,任何需全线程协同的底层操作都依赖 Safepoint:
JVM 不直接 kill 或 suspend 线程,而是靠“插点+轮询”机制达成协作:
立即学习“Java免费学习笔记(深入)”;
Safepoint 本身透明,但不当代码可能延长进入时间,导致 STW 延迟升高:
while(true) { /* 纯计算 */ })会卡住线程,无法及时响应 GC 请求Thread.yield() 或轻量方法调用(如 System.nanoTime()),触发 polling-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 查看各线程停顿分布和最长延迟基本上就这些。
以上就是在Java虚拟机中Safepoint有什么作用_Java Safepoint暂停机制解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号