JVM

1)CMS垃圾回收器

牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器:标记--清除

初始标记:需要虚拟机停顿正在执行的任务,从垃圾回收的"根对象"开始只扫描能够和"根对象"直接关联的对象,并做标记.

并发标记:在初始标记的基础上继续向下追溯,这个阶段程序的线程和并发标记的线程并发执行,用户不会感觉到停顿.

重新标记:停顿线程收集器扫描在堆中剩余的对象,并处理对象关联

并发收集:开始清理对象,垃圾收集器和用户程序并发执行.

缺点:i)用于用的是标记--清除算法因此会有内存碎片的产品ii)CPU利用率比较高,垃圾收集的过程和用户线程是同时执行的iii)需要更大的内存空间,因为标记阶段应用程序还是在运行,还会分配堆空间,因此必须预留一部分的空间,所以CMS并不是在老年代使用不足时候开始收集而是在使用到一定程度的时候提前开始收集

减少了回收的停顿但是降低了堆的使用率

用途:应用程序对停顿比较敏感,并且机器内存大,CPU牛逼,那么使用CMS是很好的选择.如果JVM老年代的空间大,使用CMS也很好.

Last updated