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收集器
未完待续。。。~~~~