垃圾回收算法:
标记-清理(Mark-Sweep):先标记,在清理,存在效率和空间问题
复制(copying):将空间分为Eden、from-survivor,to-survivor,每次只使用Eden和from-survivor区域,将存活下来的放入to-survivor,需要进行空间担保来应多存活数量较多的情况,适用于新生代(-XX:SurvivorRatio)
标记-整理(Mark-Compact):先标记,再将剩下的对象往一端进行移动,适用于老年代
ParNew:并行收集器,新生代版本,可以与CMS一起使用,主要特点是可以使用多个GC线程
Parallel Scavenge:另外一种并行收集器,主要关注CPU的吞吐量
CMS(Concurrent Mark Sweep):一种并发收集器,用于老年代,整个GC过程总共有三个标记和一个清理(初始标记,并发标记,重新标记,并发清理),初始标记只标记与GC root直接关联的对象,并发标记就是进行完全的 GC ROOTS Tracing,重新标记就是修正在并发标记期间因用户程序而发生变动的那部分对象,最后进行并发清除
CMS的停顿时间非常短,但也有三个缺点:对cpu资源敏感、浮动垃圾会引起concurrent mode failure,主要基于标记清除算法,会造成空间碎片,需要制定整理策略
G1:将空间分为多个大小相等的独立空间(region),每次只对其中一部分进行回收,G1可以根据新生代或者老年代采用不同的算法。
-XX:PrintGCDetails
minor gc:新生代gc,当eden区域不足时发生
major gc/full gc,通常这两个概念是等价的,major gc通常是伴随着minor gc,当进行minor gc时,发现老年代可供晋级空间不足,则会触发一次full gc,针对整个java堆
标记-清理(Mark-Sweep):先标记,在清理,存在效率和空间问题
复制(copying):将空间分为Eden、from-survivor,to-survivor,每次只使用Eden和from-survivor区域,将存活下来的放入to-survivor,需要进行空间担保来应多存活数量较多的情况,适用于新生代(-XX:SurvivorRatio)
标记-整理(Mark-Compact):先标记,再将剩下的对象往一端进行移动,适用于老年代
垃圾回收器
ParNew:并行收集器,新生代版本,可以与CMS一起使用,主要特点是可以使用多个GC线程
Parallel Scavenge:另外一种并行收集器,主要关注CPU的吞吐量
CMS(Concurrent Mark Sweep):一种并发收集器,用于老年代,整个GC过程总共有三个标记和一个清理(初始标记,并发标记,重新标记,并发清理),初始标记只标记与GC root直接关联的对象,并发标记就是进行完全的 GC ROOTS Tracing,重新标记就是修正在并发标记期间因用户程序而发生变动的那部分对象,最后进行并发清除
CMS的停顿时间非常短,但也有三个缺点:对cpu资源敏感、浮动垃圾会引起concurrent mode failure,主要基于标记清除算法,会造成空间碎片,需要制定整理策略
G1:将空间分为多个大小相等的独立空间(region),每次只对其中一部分进行回收,G1可以根据新生代或者老年代采用不同的算法。
-XX:PrintGCDetails
gc类型
minor gc:新生代gc,当eden区域不足时发生
major gc/full gc,通常这两个概念是等价的,major gc通常是伴随着minor gc,当进行minor gc时,发现老年代可供晋级空间不足,则会触发一次full gc,针对整个java堆
from-survivor/to-survivor