safepoint是什么

java程序里面有很多很多的java线程,每个java线程又有自己的stack,并且共享了heap。这些线程一直运行呀运行,不断对stack和heap进行操作。

这个时候如果JVM需要对stack和heap做一些操作该怎么办呢?

比如JVM要进行GC操作,或者要做heap dump等等,这时候如果线程都在对stack或者heap进行修改,那么将不是一个稳定的状态。GC直接在这种情况下操作stack或者heap,会导致线程的异常。

怎么处理呢?

这个时候safepoint就出场了。

safepoint就是一个安全点,所有的线程执行到安全点的时候就会去检查是否需要执行safepoint操作,如果需要执行,那么所有的线程都将会等待,直到所有的线程进入safepoint。

然后JVM执行相应的操作之后,所有的线程再恢复执行。

线程什么时候会进入safepoint

那么线程什么时候会进入safepoint呢?

一般来说,如果线程在竞争锁被阻塞,IO被阻塞,或者在等待获得监视器锁状态时,线程就处于safepoint状态。

如果线程再执行JNI代码的哪一个时刻,java线程也处于safepoint状态。因为java线程在执行本地代码之前,需要保存堆栈的状态,让后再移交给native方法。

如果java的字节码正在执行,那么我们不能判断该线程是不是在safepint上。

safepoint主要特定位置

1. 循环的末尾 (防止大循环的时候一直不进入safepoint,而其他线程在等待它进入safepoint)

2. 方法返回前

3. 调用方法的call之后

4. 抛出异常的位置

之所以选择这些位置作为safepoint的插入点,主要的考虑是“避免程序长时间运行而不进入safepoint”,比如GC的时候必须要等到Java线程都进入到safepoint的时候VMThread才能开始执行GC,如果程序长时间运行而没有进入safepoint,那么GC也无法开始,JVM可能进入到Freezen假死状态。在stackoverflow上有人提到过一个问题,由于BigInteger的pow执行时JVM没有插入safepoint,导致大量运算时线程一直无法进入safepoint,而GC线程也在等待这个Java线程进入safepoint才能开始GC,结果JVM就Freezen了。

safepoint只能处理正在运行的线程,它们可以主动运行到safepoint。而一些Sleep或者被blocked的线程不能主动运行到safepoint。这些线程也需要在GC的时候被标记检查,JVM引入了safe region的概念。safe region是指一块区域,这块区域中的引用都不会被修改,比如线程被阻塞了,那么它的线程堆栈中的引用是不会被修改的,JVM可以安全地进行标记。线程进入到safe region的时候先标识自己进入了safe region,等它被唤醒准备离开safe region的时候,先检查能否离开,如果GC已经完成,那么可以离开,否则就在safe region呆在。这可以理解,因为如果GC还没完成,那么这些在safe region中的线程也是被stop the world所影响的线程的一部分,如果让他们可以正常执行了,可能会影响标记的结果

可以设置JVM参数 -XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1 来输出safepoint的统计信息

转载:https://blog.csdn.net/z69183787/article/details/81103214

SafePoint是什么相关推荐

  1. java安全点_关于OopMap、SafePoint(安全点)以及安全区域

    1.OopMap 之前我们提到,在正式的GC之前总是需要进行可达性分析来查找内存中所有存活的对象,以便GC能够正确的回收已经死亡的对象.那么对于一个十分复杂的系统,每次GC的时候都要遍历所有的引用肯定 ...

  2. JVM系列之:再谈java中的safepoint

    文章目录 safepoint是什么 safepoint的例子 线程什么时候会进入safepoint safepoint是怎么工作的 总结 safepoint是什么 java程序里面有很多很多的java ...

  3. 聊聊JVM(九)理解进入safepoint时如何让Java线程全部阻塞

    在这篇聊聊JVM(六)理解JVM的safepoint 中说了safepoint的基本概念,VM thread在进行GC前,必须要让所有的Java线程阻塞,从而stop the world,开始标记.J ...

  4. 聊聊JVM(六)理解JVM的safepoint

    safepoint是JVM里面很重要的一个概念,在很多场景下都会看到它,尤其是在GC的时候.这篇讲讲safepoint.本人不是做JVM实现研究的,很多地方只能点到为止,希望能够讲清楚这个概念,具体的 ...

  5. HBase实战:记一次Safepoint导致长时间STW的踩坑之旅

    本文记录了HBase中Safepoint导致长时间STW此问题的解决思路及办法. 上篇文章回顾:HBase Replication详解 ​过 程 记 录 现象:小米有一个比较大的公共离线HBase集群 ...

  6. Invalid -Xlog option ‘-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=3

    报错场景 使用compose安装elasticsearch7.5.0时,启动报错 compose文件: 报错信息: Attaching to elasticsearch elasticsearch | ...

  7. JVM源码分析之安全点safepoint

    https://blog.csdn.net/iter_zc/article/details/41892567 https://www.jianshu.com/p/c79c5e02ebe6

  8. JVM中安全点safePoint有哪些?

    安全点是jvm选来进行GC的线程中断点.线程在执行到安全点后询问GC标志位,若标志位标识将要进行GC,则程序主动中断挂起线程等待GC.安全点的选定基本上是根据"是否具有让程序长时间执行的特征 ...

  9. 安全点 Safepoint

最新文章

  1. Jave之Scanner和不合法输入处理
  2. JAVA面试题解惑系列(四)——final、finally和finalize的区别
  3. python数据分析函数大全_Python常用数据分析函数集合
  4. 一生只为两件事,他的名字曾是中国高级机密!
  5. pytorch 图像分割的交并比_Segmentation101系列-最简单的卷积网络语义分割(1)-PASCAL VOC图像分割...
  6. php代码编写直接插入排序算法,PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析...
  7. 【elasticsearch】 document 查询原理
  8. cisco最经典书籍 下载(全CCIE们的结晶)转载资料
  9. SPSS 数据编辑器界面 度量 名义 序号 标签
  10. 400是什么错误_我想对您说小学作文400字7篇
  11. 入职后发现公司有这5种情况,别留恋,果断离职
  12. sql Server配置管理器
  13. MDI和MDIX模式配置linux,当交换机不支持MDI/MDIX时,交换机(无级连端口)间级连采用的线缆为...
  14. localstorage,sessionstorage,cookie
  15. 2012中国互联网公司、全球互联网公司最新市值排名(2012.12.06)
  16. 淘宝品牌产品无授权开直通车怎么实现
  17. 题解HDU6148 Valley Numer(数位DP+深搜DFS)
  18. 软件工程概论-- 详细设计,过程设计的6大工具:程序流程图,判定表,N-S图和判定树之间的区别, PAD图的优点?
  19. 碳云智能CEO王俊:大数据基础上人人都将活到120岁 | 2017 IT领袖峰会
  20. 不用写算法的机器视觉外观检测软件

热门文章

  1. Comet OJ-2019国庆欢乐赛
  2. 苹果企业签名掉签问题以及稳定性解析
  3. clover写入efi_把clover复制到EFI之后电脑不认clover的解决方法(UEFI Shell强制写入)
  4. 身份证号码验证(直接调用idCardValidate(String idCard) )
  5. 身份证号码组件:lt;idcardgt; —— 快应用组件库H-UI
  6. 【有利可图网】PS实战教程36:巧用PS制作人物破碎消散效果
  7. python 中 np.sum()函数 通俗易懂理解!
  8. 自己动手编写仿QQ的app -1注册界面by sdust iot zhl
  9. Jquery鼠标滚轮放大缩小图片
  10. 强化学习适合解决什么样的问题