JVM的Serial\Serial old 收集器原理解析

Serial收集器是最基本,发展历史最悠久的单线程收集器

在gc进行的过程中,CPU要停下所有的事情去处理这些,会引起卡顿

但是年代久远的电脑内存非常小,在1998年那时候的电脑都是16M左右的内存,就拿ARPG鼻祖《暗黑破坏神1》来说,和Java出的年份差不多,那是要求的电脑配置也就8M到16M内存

在gc中,就算扫描一遍全部内存时间非常少,卡顿时间非常少

Serial收集器,针对内存几十兆或一两百兆的新生代内存gc,停顿时间能控制在一百毫秒内,更别提那时候那么小的电脑内存了

但是随着后来的内存渐渐变大,尤其是现在服务器都远远超过8G了,gc时间会非常长,这可不行,就产生了后面诸如G1垃圾回收器针对高内存的回收方法

Serial收集器的总体原理图如下:

JVM的Serial\Serial old 收集器原理解析_第1张图片

优点:算法简单,内存占用少,CPU不用切换进程,导致上下文切换时间短,总体效率高

缺点:GC阶段卡顿

Serial Old收集器使用的是标记清除算法(Mark-Sweep);

JVM的Serial\Serial old 收集器原理解析_第2张图片

 可以看见会产生大量的内存碎片,但是不用复制,开销小

Serial收集器使用的是标记-复制算法

JVM的Serial\Serial old 收集器原理解析_第3张图片

 这种算法浪费了内存空间,并且复制也需要电脑资源,但是不会产生内存碎片

你可能感兴趣的:(java,开发语言)