大数据工程师面试 - JVM GC
CMS 垃圾收集器是什么?
CMS(Concurrent Mark-Sweep,即并发标记清扫)是一种用于Java的垃圾收集技术,主要处理堆内存中老年代的垃圾回收。CMS垃圾收集器的主要特性
1.并发性:CMS收集器的目标是避免冻结所有的应用线程,也就是"Stop-The-World"的操作。为了实现这一目标,CMS在标记和清除阶段的大部分时间与应用线程并发运行。2.四阶段工作过程:CMS收集器的工作流程包括以下四个阶段:•初始标记(Initial Mark):这个阶段需要暂停所有的应用线程,以标记所有从GC Roots开始即能直接关联到的对象。•并发标记(Concurrent Mark):在此阶段,垃圾回收线程与应用线程并发运行,标记所有从GC Roots开始能直接或间接到达的对象。•重新标记(Remark):此阶段也需要暂停所有应用线程,以修正并发标记因用户程序继续运行导致的标记变动。•并发清除(Concurrent Sweep):在此阶段,垃圾收集线程与应用线程并发运行,清除无法达到的对象。3.低延迟:CMS收集器的目标是尽可能降低收集过程中的停顿时间,从而使系统能提供更多的可预测性,在一些对响应时间有严格要求的应用中,CMS收集器是个不错的选择。4.CPU资源敏感:由于CMS收集器的并发性,它在垃圾收集过程中会占用一部分CPU资源,所以在CPU资源紧张的情况下使用CMS收集器可能会导致应用性能下降。
G1 垃圾收集器是什么?
G1(Garbage-First,垃圾优先)是一种用于Java的现代垃圾收集器,它能够满足大内存系统中的低暂停需求,并且对吞吐量的影响较小。G1垃圾收集器的主要特性
1.划分区域:G1收集器将堆内存分为一系列大小相等的独立区域,并在GC Roots的基础上跟踪对象的活跃度。可以独立的管理这些区域,实现了微管理内存,使得Java堆的连续性瓦解。2.并发与并行:G1能够与应用线程并发执行,也就是部分工作(标记阶段)可以与应用线程并发执行,以缩短STW的停顿时间。它也可以利用多CPU核心并行的执行垃圾收集任务。3.垃圾优先:G1收集器会优先回收垃圾最多的区域,以尽可能高效的利用其回收时间。4.预测停顿时间模型:G1收集器会尽可能的遵循用户设定的暂停时间目标,它包含了一个模型,可以预测哪些区域最可能在限定的时间内被回收完。
CMS VS G1 ?
CMS(Concurrent Mark-Sweep)和G1(Garbage-First)都是Java的垃圾收集器,它们各自有自己的设计目标和应用场景。
设计目标
•CMS:CMS的主要目标是避免长时间的GC停顿,它在标记和清除阶段与应用线程并发执行,以达到减少停顿的目的。•G1:G1垃圾收集器的目标是可以管理大型堆内存,并且可以预测垃圾收集的停顿时间,它会优先清理垃圾多的区域,以达到垃圾回收的最大化。
内存划分
•CMS:CMS使用的是标记-清除算法,堆内存分为新生代和老年代两部分。•G1:G1将堆内存分成多个相等的独立区域,既有新生代也有老年代,划分的区域可以进行独立管理。
停顿时间
•CMS:CMS设计的目标是避免"Stop-The-World"的操作,所以其停顿时间相对较短。•G1:G1的设计初衷是让垃圾收集的停顿时间变得更加可预测,并且可以设定期望的暂停时间目标。
优缺点
•CMS:优点是停顿时间短,缺点是会产生内存碎片,当堆内存中大对象较多时,可能导致效率降低。•G1:优点是可以处理大型堆内存,暂停时间可预测,但在进行全堆操作时,会存在暂停现象,且在可用CPU资源有限的情况下,其并行性能可能无法完全发挥。
在选择使用哪种垃圾收集器时,需要考虑应用的具体需求,比如是否需要处理大型堆内存,对暂停时间的要求等因素。
大家好,我是大数据欧老师,就职于互联网某头部大厂,超过 8 年的大数据从业经历。如果你有面试大数据工程师的打算,欢迎找我聊一聊!
#大数据##大数据知识体系##大数据面试##大数据面经##大数据工程师#解决职场真实面试问题,分享同学真实成功案例,欢迎订阅关注!