回收器集合
一:Serial 收集器
特点:单线程、简单高效
二:ParNew收集器
特点:多线程、
三:Parallel Scavenge 收集器
特点:属于新生代收集器也是采用复制算法的收集器,又是并行的多线程收集器(与ParNew收集器类似
四:Serial Old 收集器
特点:同样是单线程收集器,采用标记-整理算法
五:Parallel Old 收集器
特点:多线程,采用标记-整理算法。
六:CMS收集器
特点:基于标记-清除算法实现。并发收集、低停顿
七:G1收集器
特点:
并行与并发:G1能充分利用多CPU、多核环境下的硬件优势,使用多个CPU来缩短Stop-The-World停顿时间。部分收集器原本需要停顿Java线程来执行GC动作,G1收集器仍然可以通过并发的方式让Java程序继续运行。
分代收集:G1能够独自管理整个Java堆,并且采用不同的方式去处理新创建的对象和已经存活了一段时间、熬过多次GC的旧对象以获取更好的收集效果。
空间整合:G1运作期间不会产生空间碎片,收集后能提供规整的可用内存。
可预测的停顿:G1除了追求低停顿外,还能建立可预测的停顿时间模型。能让使用者明确指定在一个长度为M毫秒的时间段内,消耗在垃圾收集上的时间不得超过N毫秒。
1.串行
单线程
堆内存较小,适合个人电脑
-xx:useserialgc=serial+serialold
当发生gc时,所有的用户程序会先到达安全点停止下来,再让回收线程进行回收,避免用户线程对垃圾回收线程产生影响。
2.吞吐量优先(即CPU用于运行用户代码的时间与CPU总消耗时间的比值(吞吐量 = 运行用户代码时间 / ( 运行用户代码时间 + 垃圾收集时间 )))
多线程
堆内存较大,多核cpu
单位时间内,stw的时间最短
-xx:useparallerlgc+useparalleoldgc
垃圾回收线程与cpu的核数有关。
3.响应时间优先
多线程
堆内存较大,多核cpu
让单次的stw的时间尽可能的短
-xx:useconcmarksweepgc -xx:useparnewgc~serialold