A point in program where the state of execution is known by the VM,即代码中VM能够准确知道执行状态的位置。 程序执行时并非在所有地方都能停顿下来开始GC,只有在特定的位置才能停顿下来开始GC,这些位置称为safe-point
safe-point有多个种类,Hotspot中两者实现在一起,概念上没有直接联系,需要数据不一样
safe-point是jvm选来进行GC的线程中断点。线程在执行到安全点后询问GC标志位,若标志位标识将要进行GC,则程序主动中断挂起线程等待GC。安全点的选定基本上是根据"是否具有让程序长时间执行的特征"为标准进行选定的。如果太少可能导致GC等待的时间太长,如果太频繁可能导致运行时的性能问题。大部分指令的执行时间都非常短暂,通常会根据“是否具有让程序长时间执行的特征”为标准。比如:选择些执行时间较长的指令作为Safe Point, 如方法调用、循环跳转和异常跳转等
Safepoint机制保证了程序执行时,在不太长的时间内就会遇到可进入GC的Safepoint.Safe Region)来解决。
安全区域是指在一段代码片段中,对象的引用关系不会发生变化,在这个区域中的任何位置开始GC都是安全的。我们也可以把Safe Region看做是被扩展了的Safepoint。
程序实际执行时:
原文:https://www.cnblogs.com/hzzjj/p/15142801.html