当前位置: 首页 > article >正文

2024java高频面试之JVM-第二弹

什么是 STW

Java 中「「Stop-The-World机制简称 STW」」 ,是在执行垃圾收集算法时,Java 应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。「Java 中一种全局暂停现象,全局停顿」,所有 Java 代码停止,native 代码可以执行,但不能与 JVM 交互。

为什么需要 STW

在 java 应用程序中「「引用关系」」是不断发生「「变化」」的,那么就会有会有很多种情况来导致「「垃圾标识」」出错。想想一下如果 Object a 目前是个垃圾,GC 把它标记为垃圾,但是在清除前又有其他对象指向了 Object a,那么此刻 Object a 又不是垃圾了,那么如果没有 STW 就要去无限维护这种关系来去采集正确的信息。再举个例子,到了秋天,道路上洒满了金色的落叶,环卫工人在打扫街道,却永远也无法打扫干净,因为总会有不断的落叶。

什么是安全点

从线程角度看,安全点可以理解成是在「「代码执行过程中」」的一些「「特殊位置」」,当线程执行到这些位置的时候,说明「「虚拟机当前的状态是安全」」的。

比如:「「方法调用、循环跳转、异常跳转等这些地方才会产生安全点」」。如果有需要,可以在这个位置暂停,比如发生GC时,需要暂停所有活动线程,但是线程在这个时刻,还没有执行到一个安全点,所以该线程应该继续执行,到达下一个安全点的时候暂停,等待 GC 结束。那么如何让线程在垃圾回收的时候都跑到最近的安全点呢?

这里有「「两种方式」」:

「抢先式中断」抢先式中断:就是在stw的时候,先让所有线程「「完全中断」」,如果中断的地方不在安全点上,然后「「再激活」」,「「直到运行到安全点的位置」」再中断。

「主动式中断」主动式中断:在安全点的位置打一个标志位,每个线程执行都去轮询这个标志位,如果为真,就在最近的安全点挂起。

常见的垃圾回收器

在这里插入图片描述
Serial是一个「「单线程」」的垃圾回收器,「「采用复制算法负责新生代」」的垃圾回收工作,可以与 CMS 垃圾回收器一起搭配工作。
在这里插入图片描述
ParNew 是一个「「多线程」」的垃圾回收器,**「采用复制算法负责新生代」的垃圾回收工作,可以与CMS垃圾回收器一起搭配工作。
在这里插入图片描述
Pararllel Scavenge 是一个「「多线程」」的垃圾回收器,「「采用复制算法负责新生代」」的垃圾回收工作,可以与 Serial Old , Parallel Old 垃圾回收器一起搭配工作。
在这里插入图片描述
CMS可以说是一款具有"跨时代"意义的垃圾回收器,支持了和用户线程一起工作,做到了
「一起并发回收垃圾」**的"壮举"。
在这里插入图片描述
「1.初始标记」初始标记只是标记出来「「和 GC Roots 直接关联」」的对象,整个速度是非常快的,为了保证标记的准确,这部分会在 「「STW」」 的状态下运行。
「2.并发标记」并发标记这个阶段会直接根据第一步关联的对象找到「「所有的引用」」关系,这一部分时刻用户线程「「并发运行」」的,虽然耗时较长,但是不会有很大的影响。
「3.重新标记」重新标记是为了解决第二步并发标记所导致的标错情况,这里简单举个例子:并发标记时a没有被任何对象引用,此时垃圾回收器将该对象标位垃圾,在之后的标记过程中,a又被其他对象引用了,这时候如果不进行重新标记就会发生「「误清除」」。这部分内容也是在「「STW」」的情况下去标记的。
「4.并发清除」这一步就是最后的清除阶段了,将之前「「真正确认为垃圾的对象回收」」,这部分会和用户线程一起并发执行。

更多最新最全java面试学习资料(持续更新中。。。):
https://pan.quark.cn/s/236eda5a3dc2

在这里插入图片描述


http://www.kler.cn/news/362982.html

相关文章:

  • 外包干了2个月,技术明显退步
  • 912.排序数组(归并排序)
  • Java 使用 itextpdf 自定义 生成 pdf
  • 软考高级架构师-6.5-NoSQL数据库-超详细讲解+精简总结
  • 【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线
  • 列表、元组、集合、字典和 pandas 数据框(DataFrame)之间的数据转换
  • Spring boot快速集成开发
  • ABB防爆伺服电机HX系列 危险工业环境中的安全卫士
  • 「C/C++」C++ STL容器库 之 std::vector动态数组容器
  • 特斯拉Optimus:展望智能生活新篇章
  • 立仪科技:光谱共焦传感器精准测量玻璃
  • Spring框架如何高效的使用线程池
  • DEPT:DECOMPOSED PROMPT TUNING FOR PARAMETER-EFFICIENT FINE-TUNING
  • 【Python学习】Python基础,对于库和框架的讲解(优点缺点)小白必备的!!!
  • AST 技术学习
  • 【华为HCIP实战课程十五】OSPF的环路避免及虚链路,网络工程师
  • 10.19 RHCSA 作业
  • 【QT】常用控件(三)
  • (三)行为模式:11、模板模式(Template Pattern)(C++示例)
  • 【系统分析师】-论文-论需求开发
  • 双目视觉三角测量C语言代码实现不使用OpenCV
  • R语言笔记(一)
  • 基于neo4j的糖尿病知识图谱数据
  • 深入浅出 Vue3 nextTick
  • 推荐一个开源非线性视频编辑器:Kdenlive
  • 在一台不能接入互联网的服务器(cenos7)安装DOCKER