安全区域
问题
用户线程处于Sleep
或者Blocked
状态,这时线程无法响应虚拟机的中断请求,
不能再走到安全点的地方中断自己。
安全区域(Safe Region)
指能够确保某一段代码中,引用关系不会发生变化,因此在这个区域中任意地方
开始垃圾收集都是安全的。可以把安全区域看做是扩展拉伸了的安全点。
过程:
当用户线程执行到安全区域里边的代码时,首先会标识自己进入安全区域,
当这段时间虚拟机发起垃圾收集时,不必管这些进入安全区域的线程。
当线程要离开安全区域时,需要检测虚拟机是否完成了根节点枚举,
如果完成了,那线程继续执行,否则需要一直等待直到收到可以离开安全区域的信号。
// TODO OopMap
在在安全区域是啥样的?应该是进入安全区域的时候进已经构建了OopMap