ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JVM必须掌握的重要问题!!!

2022-06-03 16:02:37  阅读:192  来源: 互联网

标签:JVM 掌握 标记 回收 线程 必须 GC class 加载


typora-copy-images-to: JVM.assets
typora-root-url: JVM.assets
说说JVM内存模型

image-20220513212301978

image-20220513212456364

image-20220513212559965

image-20220513212715323

image-20220513212829954

image-20220513212949476

哪些区域需要GC

堆,方法区

垃圾回收算法及意义

1.标记清除算法

2.复制算法

3.标记整理算法

4.分代收集算法

说说类加载的流程
  • image-20220512112122835

  • image-20220512112254174

    什么时候需要打破双亲委派机制

    image-20220512113045672

    双亲委派的作用

    防止加载同一个.class。通过委托去询问上级是否已经加载过该.class,如果加载过了,则不需要重新加载。保证了数据安全。

    保证核心.class不被篡改。通过委托的方式,保证核心.class不被篡改,即使被篡改也不会被加载,即使被加载也不会是同一个class对象,因为不同的加载器加载同一个.class也不是同一个Class对象。这样则保证了Class的执行安全。 如何打破双亲委派(/如何破坏双亲委派):

    image-20220512113935685

  • 调整最小堆与最大堆参数,使堆内存逐渐增加,问该过程最大线程数的变化

JVM的堆和栈说一下

 

说说cms垃圾回收器

image-20220515193314038

image-20220515193342260

image-20220515193414516

image-20220515193504359

image-20220515193528817

cms的三色标记法了解吗?

image-20220515193812525

image-20220515194000444

 

如果是你怎么完成cms的重标记,解决漏标错标问题

image-20220515194230842

本来执行了A.B=null之后,B、D、E都可以被回收了,但是由于B已经变为灰色,它仍会被当做存活对象,继续遍历下去。 最终的结果就是本轮GC不会回收B、D、E,留到下次GC时回收,也算是浮动垃圾的一部分。

实际上,这个问题依然可以通过「写屏障」来解决,只要在A写B的时候加入写屏障,记录下B被切断的记录,重新标记时可以再把他们标为白色即可。 image-20220515194747029

image-20220515194810173

image-20220515195108199

image-20220515195157774

CMS为了让GC线程和用户线程一起工作,回收的算法和过程比以前旧的收集器要复杂很多。究其原因,就是因为GC标记对象的同时,用户线程还在修改对象的引用关系。因此CMS引入了三色算法,将对象标记为黑、灰、白三种颜色的对象,并通过「写屏障」技术将用户线程修改的引用关系记录下来,以便在「重新标记」阶段可以修正对象的引用。 虽然CMS从来没有被JDK当做默认的垃圾收集器,存在很多的缺点,但是它开启了「GC并发收集」的先河,为后面的收集器提供了思路,光凭这一点,就依然值得记录下来。

了解哪些垃圾回收器

image-20220515203525128

image-20220515195419960

image-20220515195710111

image-20220515195740432

image-20220515195802990

image-20220515195825287

  • 如果你想要最小化地使用内存和并行开销,请选Serial GC;

  • 如果你想要最大化应用程序的吞吐量,请选Parallel GC;

  • 如果你想要最小化GC的中断或停顿时间,请选CMs GC。

     

哪些垃圾回收器不需要STW

用可达性算法,在Garbage First的region模式下,和用户线程一起标记GCroot,接下来和用户线程一起运行,直接清理此region里面没有被引用的对象。这个过程就不会STW,但是还有一些没用的对象存在,这种没用的对象越来越多,咋办呢。一旦这个情况积累了一定的内存后,如果到达了一个规定发峰值,可以执行现有Garbage First的模式,还是要SWT。 总结一下,GC可以分为2大过程,第一个过程是我的想法,GC可以一直和用户线程一起执行,先清理一部分无用内存,不需要STW。第二个过程就是普通GC,需要STW,清理全部无用内存

 

并发标记流程

image-20220515200043597

 

netty的jvm进行了哪些优化⭐

 

 

并发标记的安全区了解吗

image-20220515201535331

为什么G1要用分区,说说G1

image-20220515202056316

image-20220515202122141

image-20220515202201371

image-20220515202338434

image-20220515202429308

image-20220515202456798

image-20220515202557271

image-20220515202638722

 

 

G1怎么判断哪些分区收益高

G1收集器会跟踪每个region里面垃圾堆积的价值(即回收该region所获的空间和所需时间的价值),然后再后台维护一个优先级列表,每次根据该优先级列表进行回收(优先处理优先级高的region),这也是Garbage First的由来。

GCRoot有哪些

image-20220514194512732

image-20220514194543554

即堆外的某变量指向堆中的对象,则该变量就是一个root。

标签:JVM,掌握,标记,回收,线程,必须,GC,class,加载
来源: https://www.cnblogs.com/zhangshuai2496689659/p/16340050.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有