java安全点_Java-JVM-安全点SafePoint

安全点(SafePoint)是Java虚拟机在执行过程中的一些特定位置,确保在此处线程状态是已知的,可以进行如垃圾回收等操作。HotSpot VM中的安全点主要在方法返回、调用、异常抛出、循环末尾等位置,减少安全点的目的是为了优化性能,避免过多的调试符号信息和执行开销。在全局GC时,所有线程需在安全点暂停,但执行JNI的线程可继续运行,直至安全点也会阻塞。
摘要由CSDN通过智能技术生成

Java-JVM-安全点SafePoint

转载声明:

本文系转载自以下文章:

转载仅为方便学习查看,一切权利属于原作者,本人只是做了整理和排版,如果带来不便请联系我删除。

摘要

本文主要是搜集网络上的好文来记录下安全点概念。看了 才发现自己是有多无知,还有很多东西都不清楚,需要多学习啊。

0x01 安全点是什么

OpenJDK官方定义如下:

安全点是在程序执行期间的所有GC Root已知并且所有堆对象的内容一致的点。

从全局的角度来看,所有线程必须在GC运行之前在安全点阻塞。 (作为一种特殊情况,运行JNI代码的线程可以继续运行,因为它们只使用句柄。但在安全点期间,它们必须阻塞而不是加载句柄的内容。)

从本地的角度来看,安全点是一个显着的点,它位于执行线程可能阻止GC的代码块中。 大多数调用点都能当做安全点。

在每个安全点都存在强大的不变量永远保持true不变,而在非安全点可能会被忽视。 编译的Java代码和C / C ++代码都在安全点之间进行了优化,但跨安全点时却不那么优化。 JIT编译器在每个安全点发出GC映射。 VM中的C / C ++代码使用程式化的基于宏的约定(例如,TRAPS)来标记潜在的安全点。

总的来说,安全点就是指,当线程运行到这类位置时,堆对象状态是确定一致的,JVM可以安全地进行操作,如GC,偏向锁解除等。

0x02 安全点分类

本节摘自https://www.zhihu.com/question/29268019/answer/43762165,作者࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值