开发喵星球

JVM 中 safepoint 是什么?

Safepoint(安全点)是Java虚拟机中的一种机制,用于确保线程在特定的位置(安全点)停顿,以便进行一些关键的操作,如垃圾回收、线程栈的安全检查、线程挂起等。在这些安全点上,虚拟机可以确保线程的一致性,即线程的状态是可靠的,不会发生不一致的情况。

在JVM中,安全点的实现通常有两种方式:

  1. 主动式抢断(Polling):

    • 在主动式抢断中,线程在特定的地方主动检查是否需要停顿。这通常通过在代码中插入轮询检查点来实现。如果检查到需要停顿,线程就会主动放弃CPU,并等待垃圾回收等操作完成后再继续执行。
  2. 被动式抢断(Trap):

    • 在被动式抢断中,线程不主动检查是否需要停顿,而是由操作系统或其他控制线程负责通知。当需要进行垃圾回收等操作时,控制线程向所有线程发送信号,通知它们在安全点停顿。

常见的安全点包括方法调用结束、循环跳转、异常跳转等。在这些位置上,线程的执行状态相对较为一致,可以安全地进行一些操作。

Safepoint的作用主要有以下几个方面:

Safepoint机制是Java虚拟机保证各种操作的可靠性和一致性的关键机制之一。在多线程环境下,确保线程在安全点上停顿是非常重要的,以避免因为线程状态的不一致性导致的各种问题。

Proudly powered by WordPress