jvm垃圾回收器CMS和G1的区别
区别1:使用范围不一样
cms是老年代垃圾回收器,需要配合serial或者parNew新生代收集器一起使用
G1是全生命周期的垃圾回收器,无需配合其他垃圾回收器使用
区别2:stop the world时间
cms的目标是最小的停顿时间和收集目标
G1有可预测的垃圾回收停顿时间模型
如果理解G1的停顿时间模型?
- G1不是基于传统的整个新生代和老年代划分,而是基于region。
- region是将连续堆内存分大小相等的区域。回收基于region,region根据去扮演新生代或者老年代,对应每种不同的回收策略。
- 这样做的目的是基于region去回收,每次回收都是N个region,而不是整个堆内存。
- 具体实现是,G1会跟踪每个region的回收价值即每次回收能释放空间以及消耗时间,然后会维护一个优先级队列,每次根据用户设置的垃圾回收时间,优先回收价值最大的region。这样保证优先时间内,获得尽可能高的回收价值
回收时间设置:-XX:MaxGCPauseMillis(默认200ms)
- 怎么处理大对象直接老年代分配的问题
- region会有个Humongous区域,一般是超过region大小的一半时会被认为是大对象,就会用N个Humongous 的region存放
- 关于region大小设置,一般都是2的N次幂

CMS是老年代垃圾回收器,适用于减少停顿时间,但可能导致浮动垃圾和CPU消耗增加。G1是全生命周期收集器,采用标记整理算法,能预测停顿时间并降低内存碎片。G1通过追踪region的回收价值来决定优先回收,处理大对象使用Humongous区域,并在筛选回收阶段按用户设定的时间计划进行。

1万+

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



