java中各种垃圾收集器的原理

1,Serial New/Serial Old(串行)

Serial New/Serial Old收集器是最基本最古老的收集器,它是一个单线程的收集器,并且它进行垃圾收集器时,必须暂停所用用户线程,Serial New收集器时针对新生代的收集器,采用的是Copying算法,Serial Old收集器是针对老年代的收集器,采用的是Mark-Compact算法,它的优点是实现简单,但是缺点是会给用户带来停顿。

2,Parrallel New (并行)

收集器是Serial收集器的多线程版本

3,Parrallel Scavenge

Parrallel Scavenge收集器是一个新生代的多线程收集器(并行收集器),它在回收期间不需要暂停其他用户线程,其采用的Copying算法,该收集器与前两个算法不同,它主要是为了达到一个可控的吞吐量

4,Parrallel Old

Parralle Old是Parrallel Scavenge的老年代版本,使用的多线程和Mark-Compact(标记整理)算法

5,CMS

CMS收集器是一个以获得最短回收停顿时间为目标的收集器,它是一种并发收集器,采用的是Mark-sweep算法。

6,G1

G1收集器时当今收集器技术最前沿的成果,它是一款面向服务器端的应用收集器,它能充分利用多核CPU、多核环境,因此它是一款并行与并发收集器,并且可建立可预测的停顿时间模型,整体上是基于标记清理,局部采用复制

三个最基本的java垃圾回收算法

1)复制算法:两个区域A和B,初始对象在A,继续存活的对象移动到B,此为新生代经常用的算法

2)标记清理:一块矛,标记要回收的对象,然后回收,一定会出现碎片,那么就出现了

3)标记-整理算法:多了碎片整理,整理出更大的内存来存放对象

综上:新生代基本用复制算法,老年代基本用标记清理、CMS采用标记清理


你可能感兴趣的:(java,cms,多线程)