1. 垃圾收集算法
标记 - 复制算法、标记 - 清理算法、标记 - 整顿算法,这三种算法都是在分代收集的机制上成立的
标记 - 复制算法:
其原理是将内存分成两局部,一部分内存 1 放对象,一部分内存 2 为空,当放对象的内存 1 进行垃圾回收时,会将依然存活的对象标记起来,而后复制到另一块内存 2 中,再把内存 1 清空。而后进行第二次回收也是如此。这种形式常常在年老代的垃圾回收中应用,即每次将被标记的依然存活的对象放到另一块的 survivor 区中。此算法的毛病是:有一部分内存必须为空,能力寄存那些依然存活的对象,如果在老年代中应用,很节约内存。
标记 - 清理算法
其原理是将内存中依然存活的对象标记起来,而后清理掉没有被标记的对象(多数状况下会标记那些须要清理的对象,而后去革除掉)。此算法的长处是较上一种节俭空间,毛病是,收集后的内存对象排列不参差,会呈现大量的不间断的垃圾碎片,二是,标记的对象过多,会很浪费时间。
标记 - 整顿算法
标记 - 整顿算法即标记到那些依然存活的对象,将这些对象都朝着一个区域挪动,最初所有的对象都是在一块连贯的区域内,最初清理掉这个区域外的所有对象。清理后的内存都是间断的,并且不须要重新分配一块空白内存。
2. 几种常见的垃圾收集器
serial 垃圾收集器
serial(串行)垃圾收集器,是单线程收集器,在执行垃圾收集时,会 STW(stop the world), 进行所有其余的线程,是最早的垃圾收集器,用户体验不是很好,然而缩小了与其余线程的来回切换,所以很简略高效(与其余收集器的单线程相比)。
serial old 收集器是 serial 的老年代版收集器,其作用是在 jdk1.5 及之前与 Parallel Scavenge 收集器搭配应用,另一种用处是作为 CMS 收集器的后备计划,当 cms 收集器呈现“concurrent mode failure” 时,会 STW,并切换为该收集器进行解决。
serial 收集器是在新生代中应用,应用的是标记复制算法
serial old 收集器在老年代应用,实用的是标记整顿算法
Parallel Scavenge 收集器
parallel Scavenge 收集器是 serial 收集器的多线程版本,默认应用和 cpu 核数雷同的线程数去进行垃圾回收,在 jvm 参数中退出
-XX:+UseParallelGC(年老代),-XX:+UseParallelOldGC(老年代) 别离应用相应的收集器。
新生代采纳标记复制算法,老年代应用标记整顿算法
Parallel Old 收集器是 Parallel Scavenge 收集器的老年代版本。应用多线程和“标记 - 整顿”算法。JDK8 默认的新生代和老年代收集器是:Parallel Scavenge 收集器和 Parallel Old 收集器()。
parNew 收集器
与 parallel 收集器类似,不同点是与 cms 搭配应用的收集器。
新生代采纳标记复制算法,老年代应用标记整顿算法
cms 收集器与三色标记算法
G1 收集器
zgc 收集器
未完待续。。。~~~~