标记-清除算法
标记之后清除所有标记过的对象,会产生大量的内存碎片,两个阶段效率都不高
复制算法
将内存分为两部分,第一部分的空间占满了就将还存活的对象, 复制到另一块上,把用过的那一块清除掉
现在的商业虚拟机新生代就是使用这种但是是划分为8:1:1 eden、 survivor0、 survivor1、每次就使用eden存放新建的对象, 如果eden内存不够就将存活的对象复制到survivor0,survivor0内存不够就复制到survivor1,
标记-整理算法
老年代使用的清除算法,将存货的对象标记,然后向一端移动 将边界之外的区域清除
Serial
单线程清除,新生代使用,使用时用户线程会暂停
ParNew
Serial的多线程实现,默认与cpu数量一样,使用时用户线程任然会暂停
Parallel Scavenge
新生代收集器 复制算法 并行的多线程收集器 目标是达到可控制的吞吐量 (吞吐量=运行用户代码的时间/运行用户代码的时间+垃圾收集时间) 停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户的体验,高吞吐量 可以最高效率的利用CPU时间,尽快的完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务
Serial Old
Serial的老年代版本,单线程收集器,使用标记整理算法,配合parallel scavenge使用
Parallel Old
Parallel的老年版本 多线程和标记整理算法
CMS
以获取最短回收时间为目标的收集器,重视服务器的响应速度 标记-清除算法 初始标记 并发标记 重新标记 并发清除初始标记只是标记GC Roots能直接关联到的对象, 并发标记就是进行GC Roots Tracing的过程,重新标记阶段是为了修正并发标记期间,用户程序继续运行而导致的标记产生变动的那部分对象的标记记录 ,这个阶段的停顿时间一般会比出师表及阶段稍长一点,但比并发标记短。无法清除浮动垃圾, 可能出现Concurrent Mode Failure失败而导致淋一次Full GC产生
G1
标记整理 不会产生空间碎片 非常精确的控制停顿 G1将整个java堆(新生代 老年代)划分为 多个大小固定的独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表, 每次允许的收集时间,优先回收垃圾最多的区域。
-
Minor GC 和Full GC
Minor GC 新生代的垃圾收集动作,频繁发生,回收速度快
Major GC或者Full GC老年代的GC
JVM清除算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.