文章目录
经典垃圾收集器
《Java虚拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同的厂商、不同版本的虚拟机所包含的垃圾收集器都可能会有很大差别,不同的虚拟机一般也都会提供各种参数供用户根据自己的应用特点和要求组合出各个内存分代所使用的收集器。
连线的垃圾收集器之间可以配合使用
Serial收集器
Serial收集器是一个单线程工作的收集器,它在进行垃圾收集时必须暂停其他所有线程直到它收集完毕
迄今依然是HotSpot虚拟机运行在客户端模式下的默认新生代收集器,简单高效,在内存资源受限的环境是所有收集器额外内存消耗最小的
ParNew收集器
ParNew是Serial收集器的多线程版本,除了多线程运行外与Serial别无二致,下边三个参数和Serial相同
-XX:SurvivorRatio
-XX:PretenureSizeThreshold
-XX:HandlePromotionFailure
运行在服务端模式下的新生代首选收集器,尤其是JDK 7之前的遗留系统中首选的新生代收集器,其中有一个与功能、性能无关但其实很重要的原因是:除了Serial收集器外,目前只有它能与CMS收集器配合工作。
ParNew是激活CMS收集器后默认的新生代收集器。
JDK9以后ParNew只能配合CMS使用,作为CMS的新生代收集器
它默认开启的收集线程数与处理器核心数量相同,在处理器核心非常多(譬如32个,现在CPU都是多核加超线程设计,服务器达到或超过32个逻辑核心的情况非常普遍)的环境中,可以使用-XX:ParallelGCThreads
参数来限制垃圾收集的线程数。
激活CMS:-XX:+UseConcMarkSweepGC
禁用或激活ParNew:-XX:+/-UseParNewGC
JDK9去掉+命令
Parallel Scavenge收集器
Parallel Scavenge收集器也是一款新生代收集器,同样是基于标记-复制算法实现的收集器,也是能够并行收集的多线程收集器
Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到一