行业网站分类,关于设计的网站有哪些,深圳代理注册公司哪家好,外链发布虽然安全点的概念和垃圾回收相关#xff0c;但是概念还是比较独立的#xff0c;所以本文是从这篇文章Java-虚拟机-垃圾收集器/垃圾收集算法/GCROOT根中抽出来的
安全点safe point
当执行垃圾回收#xff08;GC#xff09;的时候#xff0c;不是立马就执行的#xff0c;…虽然安全点的概念和垃圾回收相关但是概念还是比较独立的所以本文是从这篇文章Java-虚拟机-垃圾收集器/垃圾收集算法/GCROOT根中抽出来的
安全点safe point
当执行垃圾回收GC的时候不是立马就执行的而是需要一个恰当的时机这个时机就叫做安全点可以理解和坐公交一样不是说你想下车就马上下车的最起码也要等车到达最近一个公交站点才允许下车下面几个位置时机可以作为安全点 方法返回之前 调用某个方法之后 抛出异常的位置 循环的末尾 主要是为了保证代码执行的完整度 safepoint逻辑上等同于并发框架中的CyclicBarrie类如果你会用这个类那么应该很好理解这个逻辑的当要执行GC的时候安全点打开所以所有线程都会在执行上述几个位置的时候进入安全点表所有线程都跑到安全点之后GC线程开始执行GC
PS仔细观察这几个安全点总结起来其实就是别执行方法只有线程不执行方法了那么它才能有可能是安全点因为当执行方法的时候栈内的数据是变化的不可预知的可以理解成当线程A正在执行某个方法那么线程A一定不能GC
安全区域safe region
如果一段代码在运行的时候引用关系不会发生变化那么在这段代码就是安全区域而安全区域里的任意位置都是安全点比如下面这段代码
Thread.sleep(666);sleep方法中的任意位置都是安全点所以GC的时候如果某个线程正好处于安全区域则该线程相当于直接到达了安全点