Java-Safe Point(安全点)

虽然安全点的概念和垃圾回收相关,但是概念还是比较独立的,所以本文是从这篇文章Java-虚拟机-垃圾收集器/垃圾收集算法/GCROOT根中抽出来的

安全点safe point

当执行垃圾回收(GC)的时候,不是立马就执行的,而是需要一个恰当的时机,这个时机,就叫做安全点,可以理解和坐公交一样,不是说你想下车,就马上下车的,最起码,也要等车到达最近一个公交站点,才允许下车,下面几个位置(时机)可以作为安全点
方法返回之前
调用某个方法之后
抛出异常的位置
循环的末尾

主要是为了保证代码执行的完整度

safepoint逻辑上等同于并发框架中的CyclicBarrie类,如果你会用这个类,那么应该很好理解这个逻辑的,当要执行GC的时候,安全点打开,所以所有线程都会在执行上述几个位置的时候,进入安全点表,所有线程都跑到安全点之后,GC线程开始执行GC

PS:仔细观察这几个安全点,总结起来其实就是别执行方法,只有线程不执行方法了,那么它才能有可能是安全点,因为当执行方法的时候,栈内的数据是变化的,不可预知的,可以理解成,当线程A正在执行某个方法,那么线程A一定不能GC

安全区域safe region

如果一段代码在运行的时候,引用关系不会发生变化,那么在这段代码就是安全区域,而安全区域里的任意位置,都是安全点,比如下面这段代码

cpp 复制代码
Thread.sleep(666);

sleep方法中的任意位置,都是安全点,所以GC的时候,如果某个线程正好处于安全区域,则该线程相当于直接到达了安全点

相关推荐
q***71012 小时前
Spring Boot(快速上手)
java·spring boot·后端
better_liang4 小时前
每日Java面试场景题知识点之-分布式事务处理
java·微服务·面试·springcloud·分布式事务
L***d6706 小时前
Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
java·数据库·spring boot
凌波粒6 小时前
Springboot基础教程(3)--自动装配原理/静态资源处理/欢迎页
java·spring boot·后端
likuolei6 小时前
XSL-FO 软件
java·开发语言·前端·数据库
凌波粒6 小时前
SpringBoot基础教程(2)--yaml/配置文件注入/数据校验/多环境配置
java·spring boot·后端·spring
S***26756 小时前
Spring Boot环境配置
java·spring boot·后端
6***83056 小时前
什么是Spring Boot 应用开发?
java·spring boot·后端
毕设源码柳学姐6 小时前
计算机毕设 java 智慧社区服务系统 SSM 框架社区生活平台 Java 开发的便民服务与互动系统
java·开发语言·生活
U***l8326 小时前
【postgresql】分区表管理
java·数据库·postgresql