我们都知道,在虚拟机进行GC的时候会需要让所用的线程都停止工作,等待他GC完成,那么他是如何保证所有线程全部都停止工作的呢?

只有当所有线程都跑到了安全点,或者进入安全区域之后,才会进行GC

安全点

在安全点,虚拟机会生成OopMap用来记录引用关系(这也是不能在任何地方停下的原因,如果每一条指令都生成OopMap那么效率会非常低,也会占用大量的空间)

一般安全点设置在以下位置:

  • 方法调用
  • 循环跳转
  • 异常跳转

那么JVM是如何让线程停下的呢?事先会约定一个标志,当需要进行GC的时候,JVM会更改这个标志的值,线程在运行的时候会轮询这个标志,当收到要发生GC信号,他会运行到下一个安全点停下来,等待GC的进行

当然,仅仅用安全点是不够的,有下面一种情况,就是当线程sleep或者阻塞的时候,他根本就不会运行,更谈不上进入安全点了,更不可能让所有的线程去等它,于是引入了安全区域这个概念

安全区域

当线程进入安全区域,如sleep或者阻塞时,会标志自己已经进入了安全区域,当进行GC的时候,就不用去管它了,当他要离开安全区域是,会先看看JVM已经完成了GC没有,如果没有就等到GC完成之后再离开安全区域

最新文章

  1. GSL库在VC6.0上的配置
  2. 云计算究竟能帮你具体做些什么事?
  3. linux怎么卸载yam,linux 基本命令 - osc_foipyam7的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. Linux自动备份脚本
  5. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
  6. 通信原理matlab实验课程设计,通信原理matlab课程设计报告
  7. 20. 利用Veeam ONE监控vSphere虚拟化平台(Veeam ONE安装及配置)
  8. 如何将参数传递给setTimeout()回调?
  9. docker harbor 域名_Docker镜像仓库Harbor部署
  10. NYOJ4 - ASCII码排序
  11. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_7_静态同步方法...
  12. vs2015无法编辑html,连发Lianfa娱乐app -连发Lianfa娱乐appV6.2.84
  13. 期末复习-选择题整理(湖南大学操作系统课程雨课堂答案即期末题库)
  14. 未转变者服务器保存红字警告,未转变者3.0怎么设置自己开的服
  15. 【Linux】putty 出现 inactive
  16. Mac连接Xbox控制器(手柄)
  17. C++的strcmp
  18. 【“探索者”小车】机器人大赛“探索者”全地形小车参赛经验分享
  19. iPhone手机屏幕尺寸与倍图计算公式(更新至iPhone 14 Plus)
  20. 【工业大数据】张洁教授现场剖析制造业大数据制造的思考与实践

热门文章

  1. 大屏扩展怎么取消任务栏_win7系统扩展双屏幕时,如何在两个屏幕下都显示任务栏...
  2. 浅谈相机<2>实际相机选型
  3. 计算机网络-自顶向下方法 第一章课后习题答案(第七版)
  4. 电脑win11使用vnc连接手机ubuntu
  5. B站投稿客户端,全平台支持多p上传
  6. Echarts3之字符云按照给定形状显示
  7. 大数10进制转16进制
  8. 八大理由告诉你,微信电商为什么走不通
  9. 【stata】统计图——学习教程全记录(02)
  10. leetcode周赛5465. 子树中标签相同的节点数