https://www.bilibili.com/video/BV1qG411e7Ks

Untitled

因为 GC 过程中,所有应用线程都需要暂停之后才能执行 GC,这时候就称为 STW ,或者叫做 GC 暂停。

安全点

Untitled

用户线程暂停,GC 线程要开始工作,但是要确保用户线程暂停的这行字节码指令是不会导致引用关系的变化。所以 JVM 会在字节码指令中,选一些指令,作为”安全点“,比如方法调用、循环跳转、异常跳转等,一般是这些指令才会产生安全点。

为什么它叫安全点,是这样的,GC 时要暂停业务线程,并不是抢占式中断(立马把无误线程中断)而是主动式中端。

主动式中断时设置一个标志,这个标志是中断标志,各业务线程在运行过程中会不停的主动去轮询这个标志,一旦发现中断标志位 True ,就会在自己最近的”安全点“上主动中断挂起