在 Java 中,Safepoint(安全点) 是 JVM 中的一个特殊机制,主要用于辅助垃圾回收(GC)、代码优化(如 JIT 编译)等需要暂停线程的操作。
其核心作用是:让所有线程在特定时刻进入一个"安全状态",此时 JVM 可以安全地执行某些全局操作(如 GC)。
具体特点:
- 线程到达 Safepoint 时会暂停执行,确保自身状态稳定(如不持有不一致的对象引用)
- 常见的 Safepoint 触发场景:方法返回时、循环结束时、异常抛出时等
- JVM 会在字节码层面插入 Safepoint 检查点,线程执行到这些点时会判断是否需要暂停
- 不同线程可能在不同时间到达 Safepoint,JVM 会等待所有线程都进入 Safepoint 后才执行后续操作
简单说,Safepoint 就像交通信号灯,让所有线程暂时"停车",以便 JVM 进行必要的"道路维护"(如垃圾回收),完成后再让线程继续执行。