热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

typora-copy-images-to:JVM.assetstypora-root-url:JVM.assets说说JVM内存模型哪些区域需要GC堆,方法区垃圾回收算法及意义1

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。



推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 大厂首发!思源笔记docker
    JVMRedisJVM面试内存模型以及分区,需要详细到每个区放什么?GC的两种判定方法GC的三种收集方法:标记清除、标记整理、复制算法的 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • 子类从父类继承所有的成员(字段,方法,嵌套类),构造方法不属于成员,所有子类不能继承,但是子类可以调用父类的构造方法对于private方法和属性,子类一定是继承了的,但是没有访问权 ... [详细]
  • Android系统启动过程分析一、Android平台架构首先贴一张Android系统架构图方便理解整个Android架构,这可以让我们从整体上对整个启动流程有个大概认知。可以看出整 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • SLAM中相机运动估计的基本问题及解决方案
    本文讨论了SLAM中相机运动估计的基本问题,指出了解决方案的存在。作者认为阅读相关SLAM书籍是掌握基础原理的有效途径,而不是仅仅依赖现成的解决方案。同时,作者也提到了激光雷达和特征点匹配等技术在SLAM中的应用,并建议读者深入理解相关原理,而不是盲目追求现成的代码。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
author-avatar
jfgkj6454_478
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有