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

相关推荐
AI人工智能+电脑小能手2 分钟前
【大白话说Java面试题】【Java基础篇】第35题:怎样声明一个类不会被继承?什么场景下会用
java·开发语言·后端·面试
升鲜宝供应链及收银系统源代码服务8 分钟前
升鲜宝云仓供应链管理系统 数据库数据字典设计 (一)---升鲜宝生鲜配送供应链管理系统
java·生鲜配送源代码·供应链源代码·生鲜供应链源代码·企业erp源代码·云仓供应链管理系统
大厂数码评测员15 分钟前
2026 年家庭菜谱记录工具怎么选:从功能边界和小程序代码实现看免费与付费差异
java·开发语言·apache
twc82915 分钟前
从架构视角梳理全链路压测的核心业务链路
java·大数据·软件测试·架构·性能测试·全链路压测
XS03010617 分钟前
Java基础 set集合
java·开发语言
驭渊的小故事18 分钟前
继承和多态
java·开发语言
Bechamz21 分钟前
大数据开发学习Day27
java·大数据·学习
Byron__28 分钟前
Java并发核心面试知识点
java·面试·多线程·并发编程
Java成神之路-29 分钟前
Java SPI vs Spring SPI
java·spring
希望永不加班31 分钟前
Java数据类型陷阱:int和Integer的7个关键区别
java·开发语言