JVM的安全点

JVM的安全

有两种查找 GC Roots 的方法:

  • 遍历方法区和栈区查找(保守式 GC)
  • OopMap 数据结构来记录 GC Roots 的位置(准确式 GC)

对应 OopMap 的位置即可作为一个安全点(Safe Point)。安全点意味着在这个点时,所有工作线程的状态是确定的,JVM 就可以安全地执行 GC 。

如何选定安全点

  1. 循环的末尾
  2. 方法临返回前
  3. 调用方法之后
  4. 抛异常的位置

为什么选定这些位置作为安全点:主要的目的就是避免程序长时间无法进入 Safe Point。

安全区域又是什么?Safe Region 是指在一段代码片段中,引用关系不会发生变化。在这个区域内的任意地方开始 GC 都是安全的。

posted @ 2021-04-22 23:47  i%2  阅读(205)  评论(0)    收藏  举报