本文将会介绍各种不同类型的细述Java垃圾回收器。垃圾回收是垃圾Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程。 Java有四种类型的回收垃圾回收器, 这四种类型的机制垃圾回收器都有各自的优点和缺点。最重要的细述是程序员可以选择JVM使用哪种类型的垃圾回收器。我们可以通过传递不同的垃圾JVM参数来设置使用哪一个。各个垃圾回收器在不同应用场景下的回收效率会有很大的差异。因此了解各种不同类型的机制垃圾回收器以及它们的应用场景是非常重要的。 Serial Garbage Collector 串行垃圾回收器控制所有的细述应用线程。它是垃圾为单线程场景设计的,只使用一个线程来执行垃圾回收工作。回收它暂停所有应用线程来执行垃圾回收工作的机制方式不适用于服务器的应用环境。高防服务器它最适用的细述是简单的命令行程序。 使用-XX:+UseSerialGCJVM参数来开启使用串行垃圾回收器。垃圾 Parallel Garbage Collector 并行垃圾回收器也称作基于吞吐量的回收回收器。它是JVM的默认垃圾回收器。与Serial不同的是,它使用多个线程来执行垃圾回收工作。和Serial回收器一样,它在执行垃圾回收工作是也需要暂停所有应用线程。 CMS Garbage Collector 并发标记清除(Concurrent Mark Sweep,CMS)垃圾回收器,使用多个线程来扫描堆内存并标记可被清除的对象,然后清除标记的对象。CMS垃圾回收器只在下面这两种情形下暂停工作线程, 对比与并行垃圾回收器,CMS回收器使用更多的CPU来保证更高的吞吐量。如果我们可以有更多的CPU用来提升性能,那么CMS垃圾回收器是比并行回收器更好的亿华云计算选择。 使用-XX:+UseParNewGCJVM参数来开启使用CMS垃圾回收器。 G1 Garbage Collector G1垃圾回收器应用于大的堆内存空间。它将堆内存空间划分为不同的区域,对各个区域并行地做回收工作。G1在回收内存空间后还立即堆空闲空间做整合工作以减少碎片。CMS却是在全部停止(stop the world,STW)时执行内存整合工作。对于不同的区域G1根据垃圾的数量决定优先级。 使用-XX:UseG1GCJVM参数来开启使用G1垃圾回收器。 Java 8 的优化 在使用G1垃圾回收器是,开启使用-XX:+UseStringDeduplacatonJVM参数。它会通过把重复的String值移动到同一个char[]数组来优化堆内存占用。这是Java 8 u 20引入的选项。 以上给出的四个Java垃圾回收器,在什么时候使用哪一个去决于应用场景,硬件配置和吞吐量要求。 Garbage Collection JVM Options 下面是些主要的与Java垃圾回收相关的JVM选项。 Type of Garbage Collector to run GC 优化选项 Example Usage of JVM GC Options