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的时候,如果某个线程正好处于安全区域,则该线程相当于直接到达了安全点

相关推荐
Freak嵌入式13 分钟前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
java·开发语言·数据结构·python·接口·抽象基类
前端小马23 分钟前
解决IDEA出现:java: 程序包javax.servlet不存在的问题
java·servlet·intellij-idea
IH_LZH1 小时前
Broadcast:Android中实现组件及进程间通信
android·java·android studio·broadcast
去看全世界的云1 小时前
【Android】Handler用法及原理解析
android·java
.Net Core 爱好者1 小时前
Redis实践之缓存:设置缓存过期策略
java·redis·缓存·c#·.net
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑1 小时前
苍穹外卖学习笔记(五)
java·笔记·学习
码上一元1 小时前
【百日算法计划】:每日一题,见证成长(017)
java·算法
用生命在耍帅ㅤ1 小时前
java spring boot 动态添加 cron(表达式)任务、动态添加停止单个cron任务
java·开发语言·spring boot
学java的小菜鸟啊1 小时前
第五章 网络编程 TCP/UDP/Socket
java·开发语言·网络·数据结构·网络协议·tcp/ip·udp
zheeez1 小时前
微服务注册中⼼2
java·微服务·nacos·架构