当前位置: 首页 > 科技观察

描述Java垃圾收集机制→Java垃圾收集器的类型

时间:2023-03-17 20:34:19 科技观察

本文将介绍各种类型的Java垃圾收集器。垃圾收集是Java用来将程序员从分配和释放内存的苦差事中解放出来的一个自动过程。Java有四种垃圾收集器,SerialGarbageCollectorParallelGarbageCollectorCMSGarbageCollectorG1GarbageCollector这四种垃圾收集器各有优缺点。最重要的是,程序员可以选择JVM使用哪种类型的垃圾收集器。我们可以通过传递不同的JVM参数来设置使用哪一个。各个垃圾收集器在不同应用场景下的效率会有很大差异。所以了解各种类型的垃圾收集器及其应用场景是非常重要的。串行垃圾收集器串行垃圾收集器控制所有应用程序线程。它是为单线程场景设计的,只使用一个线程来执行垃圾收集工作。它暂停所有应用程序线程以执行垃圾收集工作的方式不适合服务器应用程序环境。它最适用于简单的命令行程序。使用-XX:+UseSerialGCJVM参数启用串行垃圾收集器。并行垃圾收集器并行垃圾收集器也称为基于吞吐量的收集器。它是JVM的默认垃圾收集器。与Serial不同,它使用多个线程来执行垃圾收集工作。和Serial收集器一样,它在进行垃圾收集时也需要挂起所有应用线程。CMSGarbageCollectorConcurrentMarkSweep(CMS)垃圾收集器使用多个线程扫描堆内存并标记可以清除的对象,然后清除标记的对象。CMS垃圾收集器只会在以下两种情况下挂起工作线程。在老年代标记引用对象时,在垃圾回收过程中堆内存会发生变化。与并行垃圾收集器相比,CMS收集器使用更多的CPU来保证更高的吞吐量。如果我们可以拥有更多的CPU来提高性能,那么CMS垃圾收集器是比并行收集器更好的选择。使用-XX:+UseParNewGCJVM参数启用CMS垃圾收集器。G1垃圾收集器G1垃圾收集器用于大堆内存空间。它将堆内存空间划分为不同的区域,并并行回收每个区域。回收内存空间后,G1也立即堆放空闲空间做整理工作,减少碎片。CMS在所有停止(stoptheworld,STW)时执行内存合并工作。对于不同的区域,G1根据垃圾量来决定优先级。使用-XX:UseG1GCJVM参数启用G1垃圾收集器。使用G1垃圾收集器时,使用-XX:+UseStringDeduplacatonJVM参数启用Java8优化。它通过将重复的String值移动到同一个char[]数组来优化堆内存使用。这是Java8u20中引入的一个选项。上面给出的四种Java垃圾收集器,什么时候使用哪一种取决于应用场景、硬件配置和吞吐量要求。垃圾收集JVM选项下面是一些与Java垃圾收集相关的主要JVM选项。要运行的垃圾收集器类型GC优化选项JVMGC选项的示例用法java-Xmx12m-Xms3m-Xmn1m-XX:PermSize=20m-XX:MaxPermSize=20m-XX:+UseSerialGC-jarjava-application.jar