安全区域

问题

用户线程处于Sleep或者Blocked状态,这时线程无法响应虚拟机的中断请求,

不能再走到安全点的地方中断自己。

安全区域(Safe Region)

指能够确保某一段代码中,引用关系不会发生变化,因此在这个区域中任意地方

开始垃圾收集都是安全的。可以把安全区域看做是扩展拉伸了的安全点。

过程:

当用户线程执行到安全区域里边的代码时,首先会标识自己进入安全区域,

当这段时间虚拟机发起垃圾收集时,不必管这些进入安全区域的线程。

当线程要离开安全区域时,需要检测虚拟机是否完成了根节点枚举,

如果完成了,那线程继续执行,否则需要一直等待直到收到可以离开安全区域的信号。

// TODO OopMap在在安全区域是啥样的?应该是进入安全区域的时候进已经构建了OopMap