1、GC 简介
GC是Garbage Collection,即垃圾回收。
新生成的对象首先存放在生成区,当生成区满了,触发Minor GC,存活下来的对象转移到Survivor0,即FromSpace,Survivor0区满后触发执行Minor GC,存活对象移动到Suvivor1区,即ToSpace,经过多次Minor GC仍然存活的对象转移到老年代。
所以老年代存储的是长期活动的对象,当老年代满了会触发Major GC。
Minor GC和Major GC是俗称,有些情况下Major GC和Full GC是等价的,如果出发了Full GC,那么所有线程必须等待GC完成才能继续(见GC分类和算法)。
将对象根据存活概率进行分类,对存活时间长的对象,放到固定区,从而减少扫描垃圾时间及GC频率。并针对分类进行不同的垃圾回收算法,对算法扬长避短。
为什么幸存区分为大小相同的两部分:S0,S1
主要为了解决碎片化,因为回收一部分对象后,剩余对象占用的内存不连续,也就是碎片化,过于严重的话,当前连续的内存不够新对象存放就会触发GC,这样会提高GC的次数,降低性能,当S0 GC后存活对象转移到S1后存活对象占用的就是连续的内存。
本文详细介绍了JVM的垃圾收集机制,包括GC简介、触发条件、对象存活判断、垃圾回收算法和各种垃圾收集器的工作原理。重点讨论了各种算法如标记-清除、复制、标记-整理,以及各种收集器如Serial、ParNew、Parallel Scavenge、CMS和G1的特点与应用场景。文章还探讨了GC日志分析与优化,提供了JVM的常用参数及其对系统性能的影响,并给出了实例优化方案。
订阅专栏 解锁全文

2万+

被折叠的 条评论
为什么被折叠?



