stw原理

让线程停止的方式
test %eax, os::_polling_page 通过test汇编指令设置eflags寄存器的状态 正常_polling_page 这个内存页可以正常访问没有问题 但是当这个内存页变成了不可读了 那就会触发操作系统的异常 也就是会发送SIGSEGV 这个信号 SIGSEGV 当执行了一个无效的内存地址 SIGSEGV百度百科写的很详细
SIGSEGV 这个信号发送了就能在程序中捕获它 捕获它之后就可以达到不调用操作系统api的方式停止线程从而提升效率
stw的时候会有死循环不断的检测是否所有用户线程进入中断状态如果都进入了就开始gc

OopMap

用来存储根对象(GC root)它会在使用对象之前把它存起来 用来做gcroot扫描的入口 可以使用它快速的扫描对象是否有引用 OopMap不是每条指令都有的 只有特定的位置才存在 这个位置称为安全点 这是cms及之后的垃圾收集器才存在的概念 因为有了安全点的概念才能实现并发型的垃圾收集器 并发型的垃圾收集器会在某一点进行stw 这个stw开始执行的条件就是当用户线程全部都进入安全点 进入安全点之后开始扫描gc root扫描完开始清理垃圾 OopMap的作用就是用来高效的扫描gcroot

设置安全点

for循环int类型的i 会让jvm觉得int才4字节数据很小不会创建安全点 改为long类型jvm会觉得很大 就会在循环中做一个安全点 要触发gc所有线程都要进入安全点 让线程快速的进入安全点也是优化手段

        for (long i = 1; i <= 1000000000; i++) {boolean b = 1.0 / i == 0;}

java1.8.131或者以上的版本, 在jvm运行参数中加
-XX:+UseCountedLoopSafepoints 参数 这个参数是强制在可数循环中创建安全点

在循环中加安全点可以避免某些运行时间慢的循环迟迟到不了安全点

STWOopMap安全点相关推荐

最新文章

  1. docker部署mysql5-7-31
  2. lazada本地店怎么开通,需要什么条件?
  3. window.btoa
  4. WinAPI: midiOutCachePatches - 预装音色
  5. 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码
  6. 为什么先编码再解码? 即先降采样,然后上采样
  7. finalshell远程安装oracle,安装oracle的问题
  8. linux tomcat 进程杀掉_Linux下tomcat的配置踩坑
  9. 半个月自学入行软件测试,也许你就是下一个测试总监
  10. mysql 导出dmp文件_PLSQL Developer导入导出表数据结构
  11. Python反向列表
  12. ssh连接缓慢 ssh连接失败问题 Linux 脚本解决ssh连接缓慢问题,windows解决本地ssh连接失败
  13. 【数据库】Hive SQL 正则表达式进阶二(regexp_extract函数进阶使用)
  14. 【读过的书】《从你的全世界路过》
  15. 信息系统项目管理师考试论文写作复习笔记(4)-范围管理论文2
  16. react-router-dom v6 使用
  17. 测试抑郁症的20道题(三)
  18. mysql怎么子查询_在mysql中如何进行子查询?
  19. 理解ConstraintLayout性能上的好处(转载,仅供学习)
  20. java qq邮箱服务器端口_spring mail借助qq邮箱服务器发送邮件

热门文章

  1. 国内镜像源(阿里、网易、清华、中科大) ubuntu20.04下载地址超快
  2. 使用MySQL Shell搭建MGR环境
  3. ASP.NET 第八季 ajax技术-胡延亮-专题视频课程
  4. vue 点赞 点爱心 代码
  5. 白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近
  6. android写入文件方法,Android 追加写入文件的三种方法
  7. 生产报表怎么做,报表自动化工具推荐
  8. 项目-医院门诊系统-需求
  9. strictmode android,Android StrictMode使用
  10. Prometheus+Springboot2.x实用实战——Timer(一)之@Timed初探