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

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。

posted @   zhangshuai2496689659  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示