JVM垃圾回收算法与收集器全解析

JVM垃圾回收算法与垃圾收集器详解

垃圾回收算法

标记-清除算法(Mark-Sweep) 该算法分为标记和清除两个阶段。标记阶段遍历所有对象,标记出存活对象;清除阶段回收未被标记的对象。缺点是会产生内存碎片,影响大对象分配效率。

标记-整理算法(Mark-Compact) 在标记阶段与标记-清除算法相同,但在清除阶段会将存活对象向内存一端移动,然后清理边界外的内存。解决了内存碎片问题,但移动对象会增加开销。

复制算法(Copying) 将内存分为两块,每次只使用其中一块。垃圾回收时,将存活对象复制到另一块内存中,然后清空当前内存块。效率高且无碎片,但内存利用率降低。

分代收集算法(Generational) 基于对象生命周期特点,将堆内存分为新生代和老年代。新生代使用复制算法,老年代使用标记-清除或标记-整理算法。这是现代JVM的主流实现方式。

垃圾收集器实现

Serial收集器 单线程工作的收集器,进行垃圾回收时会暂停所有用户线程(Stop-The-World)。采用复制算法处理新生代,标记-整理算法处理老年代。适用于客户端模式或资源受限环境。

Parallel收集器(Throughput Collector) Serial收集器的多线程版本,使用多线程进行垃圾回收。目标是通过并行化提高吞吐量,适合后台运算且对交互响应要求不高的场景。

ParNew收集器 Parallel收集器的改进版,专门优化了与CMS收集器的配合。仅作用于新生代,采用多线程复制算法。是CMS收集器默认的新生代搭档。

CMS收集器(Concurrent Mark-Sweep) 以获取最短回收停顿时间为目标的收集器。采用标记-清除算法,分为四个阶段:

  • 初始标记(短暂STW)
  • 并发标记
  • 重新标记(短暂STW)
  • 并发清除

允许垃圾回收线程与用户线程并发执行,适合对延迟敏感的应用。但会产生内存碎片,且并发阶段会占用CPU资源。

性能考量与选择建议

吞吐量优先场景 Parallel收集器组合(新生代Parallel+老年代Parallel Old)适合批处理、科学计算等场景。通过并行化最大化利用系统资源完成计算任务。

低延迟优先场景 ParNew+CMS组合适合Web服务等交互式应用。CMS通过并发降低停顿时间,但需要预留足够内存应对并发失败时的Full GC。

内存限制严格场景 Serial收集器在资源受限环境(如嵌入式系统)仍有价值。虽然停顿时间长,但内存开销和实现复杂度最低。

参数调优方向

  • 新生代大小:通过-Xmn指定,影响Minor GC频率
  • 晋升阈值:-XX:MaxTenuringThreshold控制对象晋升老年代年龄
  • CMS触发阈值:-XX:CMSInitiatingOccupancyFraction设置老年代使用率触发百分比
  • 并行线程数:-XX:ParallelGCThreads调节并行收集器工作线程数

现代JVM已发展出更先进的G1、ZGC等收集器,但传统收集器在特定场景仍具优势。理解这些基础收集器的工作原理,是掌握高级调优技术的前提。

BbS.okapop174.sbs/PoSt/1122_507603.HtM
BbS.okapop175.sbs/PoSt/1122_241677.HtM
BbS.okapop176.sbs/PoSt/1122_871272.HtM
BbS.okapop177.sbs/PoSt/1122_128330.HtM
BbS.okapop178.sbs/PoSt/1122_489026.HtM
BbS.okapop179.sbs/PoSt/1122_484424.HtM
BbS.okapop180.sbs/PoSt/1122_434524.HtM
BbS.okapop181.sbs/PoSt/1122_854368.HtM
BbS.okapop182.sbs/PoSt/1122_690874.HtM
BbS.okapop183.sbs/PoSt/1122_043323.HtM
BbS.okapop174.sbs/PoSt/1122_211236.HtM
BbS.okapop175.sbs/PoSt/1122_976617.HtM
BbS.okapop176.sbs/PoSt/1122_381863.HtM
BbS.okapop177.sbs/PoSt/1122_278413.HtM
BbS.okapop178.sbs/PoSt/1122_869618.HtM
BbS.okapop179.sbs/PoSt/1122_894496.HtM
BbS.okapop180.sbs/PoSt/1122_280563.HtM
BbS.okapop181.sbs/PoSt/1122_878671.HtM
BbS.okapop182.sbs/PoSt/1122_633106.HtM
BbS.okapop183.sbs/PoSt/1122_963981.HtM
BbS.okapop174.sbs/PoSt/1122_580268.HtM
BbS.okapop175.sbs/PoSt/1122_141118.HtM
BbS.okapop176.sbs/PoSt/1122_235977.HtM
BbS.okapop177.sbs/PoSt/1122_820641.HtM
BbS.okapop178.sbs/PoSt/1122_814412.HtM
BbS.okapop179.sbs/PoSt/1122_150325.HtM
BbS.okapop180.sbs/PoSt/1122_803259.HtM
BbS.okapop181.sbs/PoSt/1122_029995.HtM
BbS.okapop182.sbs/PoSt/1122_520522.HtM
BbS.okapop183.sbs/PoSt/1122_268573.HtM
BbS.okapop174.sbs/PoSt/1122_655673.HtM
BbS.okapop175.sbs/PoSt/1122_161062.HtM
BbS.okapop176.sbs/PoSt/1122_618046.HtM
BbS.okapop177.sbs/PoSt/1122_176644.HtM
BbS.okapop178.sbs/PoSt/1122_526560.HtM
BbS.okapop179.sbs/PoSt/1122_428738.HtM
BbS.okapop180.sbs/PoSt/1122_114342.HtM
BbS.okapop181.sbs/PoSt/1122_749708.HtM
BbS.okapop182.sbs/PoSt/1122_175790.HtM
BbS.okapop183.sbs/PoSt/1122_396903.HtM
BbS.okapop184.sbs/PoSt/1122_064786.HtM
BbS.okapop185.sbs/PoSt/1122_890306.HtM
BbS.okapop186.sbs/PoSt/1122_856526.HtM
BbS.okapop187.sbs/PoSt/1122_942385.HtM
BbS.okapop188.sbs/PoSt/1122_258434.HtM
BbS.okapop190.sbs/PoSt/1122_247444.HtM
BbS.okapop191.sbs/PoSt/1122_071426.HtM
BbS.okapop192.sbs/PoSt/1122_584172.HtM
BbS.okapop193.sbs/PoSt/1122_577696.HtM
BbS.okapop194.sbs/PoSt/1122_779093.HtM
BbS.okapop184.sbs/PoSt/1122_041224.HtM
BbS.okapop185.sbs/PoSt/1122_893587.HtM
BbS.okapop186.sbs/PoSt/1122_905737.HtM
BbS.okapop187.sbs/PoSt/1122_335166.HtM
BbS.okapop188.sbs/PoSt/1122_378034.HtM
BbS.okapop190.sbs/PoSt/1122_731368.HtM
BbS.okapop191.sbs/PoSt/1122_955256.HtM
BbS.okapop192.sbs/PoSt/1122_972114.HtM
BbS.okapop193.sbs/PoSt/1122_846501.HtM
BbS.okapop194.sbs/PoSt/1122_360026.HtM
BbS.okapop184.sbs/PoSt/1122_865070.HtM
BbS.okapop185.sbs/PoSt/1122_368325.HtM
BbS.okapop186.sbs/PoSt/1122_247903.HtM
BbS.okapop187.sbs/PoSt/1122_098728.HtM
BbS.okapop188.sbs/PoSt/1122_291281.HtM
BbS.okapop190.sbs/PoSt/1122_113475.HtM
BbS.okapop191.sbs/PoSt/1122_219068.HtM
BbS.okapop192.sbs/PoSt/1122_983035.HtM
BbS.okapop193.sbs/PoSt/1122_784561.HtM
BbS.okapop194.sbs/PoSt/1122_740856.HtM
BbS.okapop184.sbs/PoSt/1122_694983.HtM
BbS.okapop185.sbs/PoSt/1122_494452.HtM
BbS.okapop186.sbs/PoSt/1122_535788.HtM
BbS.okapop187.sbs/PoSt/1122_559346.HtM
BbS.okapop188.sbs/PoSt/1122_648570.HtM
BbS.okapop190.sbs/PoSt/1122_683148.HtM
BbS.okapop191.sbs/PoSt/1122_306400.HtM
BbS.okapop192.sbs/PoSt/1122_349936.HtM
BbS.okapop193.sbs/PoSt/1122_474147.HtM
BbS.okapop194.sbs/PoSt/1122_588133.HtM

#牛客AI配图神器#

全部评论

相关推荐

我是个没天赋的人,努力学习也只考上了个一本,家里条件也不怎么样。大一玩了一年,没怎么学技术,也没有卷绩点,全在游戏小说抖音中度过。大二上接触了牛客,看到了许多优秀的同龄人。很多双非的同学,甚至不少学院本的同学都进了大厂实习。我把他们作为榜样,决定好好学习。我每天都至少学八九个小时,很多次都想要放弃,想哭,我都坚持了下来。我总是告诉自己,只要努力,就一定能有好的结果。这几个月过的很累,但也很充实。转眼就到大二下了,我决定去找实习了,但是学校的认可度让我感到心底发凉,明明和广工这种知名双非分差不多,结果总被问是不是公办本科。两个月投了一千份实习,只有四个面试,最终去了个中小厂实习。结果就是改了两个月bug,虽然mt人挺好,但是实在学不了什么东西,所以就离职开始面试。凭借这段实习,确实多了不少中小厂面试,但是大厂依旧没有面试机会。除了字节腾讯所有大厂都投了,结果依旧是0面试。最终有幸获得美团的面试机会,面试也幸运的通过,然后入职了。为了省钱坐十几个小时硬座到北京,到北京的第一天,由于太激动想要租房,结果被坑了2600,之前实习的地方,房东也故意不退押金,加起来总共损失3000多。虽然很难过,但是我还是忍受了下来,我想着实习才刚开始,会好起来的。实习了大半个月,跟学校这边沟通一直不成功,我每天都寝食难安,精神都快崩溃了,经常凌晨两三点才睡着,想要跳楼。最后迫于无奈,我一大早我坐高铁回去,恳求院主任给我一个机会,我怎么恳求讲理都没用,甚至都磕头下跪了,还是没用。院主任一点机会都没给我,连让我跟各科老师沟通机会都不给,要不休学要不辞职。我没得选择,这段实习我看的比我的生命还重要,这不仅是我这大半年的心血,更是未来的一份希望。我只能休学,我想着现在好好实习,多学点技术,到时候秋招早点拿到offer,然后再补这学期的课也不是不行。但是,现实总是事与愿违。这三个月说实话并没有学到什么东西,前一个月很闲,这两个月事很多,每天基本都是九点后下班,但都是杂活。产出都是靠我看文档加上代码写上去的。我真的很想锻炼一下技术,但是总是不尽人意。三个月了,我到现在都还没做过一个像样点的需求。产出是能编,但有破绽不说还没锻炼到技术。我好想真正的做一下需求啊,我好想真正的走完一遍流程,去上线一次啊。接下来两个月,我不知道该怎么坚持下去了,现在每天都想哭,很焦虑,很难受。冒着将来可能延毕的风险,我赌上了一切,结果输的这么彻底,可能我就只是个小丑吧。如果家庭好点就不用卷了,如果我聪明一点就能上个好学校了,如果大一有人带我,我就不会摆烂了,如果院主任给我个机会,我就不用这么苦了,如果我实习能有机会好好锻炼自己,我就不用这么难受焦虑了。但是没办法,我又能怎么办呢,无非是咬紧牙关罢了,毕竟没人能够帮助我,只能靠自己我可真是个小丑啊
牛客57762807...:这种院长就是恶心的死,家里户口本只有一页的孤儿,我们院长也是,家里人都去亲自找院长,送几百块的水果,送礼物,结果还是被她一顿电话操作毁offer了,担心学生安全不放实习就算了,特么是担心上课没人去,我这种会容易带坏风气导致很多人效仿,***妈呢,什么时候学生的前途被一堆KPI数字给限制了,本来还想做个乖孩子的,以为院长能开开恩,但是这种死了没的东西让我决定我再也不做乖孩子了,后面才知道爱哭的孩子没有奶吃的,还会被一顿毒打,大三下学期我决定偷偷溜走一学期,一节课都不去,少的钱她一个孤儿也给我补不了
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务