开发者社区> 问答> 正文

什么是Safepoint?

什么是Safepoint?

展开
收起
1358896759097293 2021-05-04 15:23:35 855 0
1 条回答
写回答
取消 提交回答
  • 45271990@qq.com

    在hotstpot内部,有时候它会把 Java线程暂停掉,有时候又会把它叫做Stop The World,在hotstpot里可以做很多vm级别操作,如 GC、HeapDump/Stack trace、JVMTI、Check vmOperations.hpp,这里列了一个 vmOperations.hpp这个头文件里面列出了绝大部分的这些vm operation。下图演示,如正常的java的线程,运行的过程中,有一个VMthread,有些特殊的条件,触发了一个vm的操作请求,这时候就会发起一个请求,要求Java thread都进入safepoint, Java thread收到请求以后,会自己暂停,等所有的Java thread停下来,整个JVMTI都安全了,可以做一些比较复杂的vm的操作,等操作做完了以后,就可以要求这些Java线程再重新恢复。

    35.png

    举例来说像GC会把在Heap中的Java对象移来移去,如果这时Java线程正在运行的时候,一边运行对象一边移动,Java线程有可能就会访问到一个非法的地址,造成整个JVMTI的crash,所以这时候需要进入safepoint,把整个Java线程给暂停, Stop The World,会很影响性能。

    2021-05-05 22:52:30
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载