细述 Java垃圾回收机制→Types of Java Garbage Collectors

简介:

细述 Java垃圾回收机制→Types of Java Garbage Collectors

本文非原创,翻译自Types of Java Garbage Collectors
在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的。和C语言不一样的是Java程序员不需要手动写垃圾回收相关的代码。这是使得Java如此流行,同时也是Java能帮助程序员写出更好的Java应用的优点之一。

本文将会介绍各种不同类型的Java垃圾回收器。垃圾回收是Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程。
Java有四种类型的垃圾回收器,

  1. Serial Garbage Collector

  2. Parallel Garbage Collector

  3. CMS Garbage Collector

  4. G1 Garbage Collector


这四种类型的垃圾回收器都有各自的优点和缺点。最重要的是程序员可以选择JVM使用哪种类型的垃圾回收器。我们可以通过传递不同的JVM参数来设置使用哪一个。各个垃圾回收器在不同应用场景下的效率会有很大的差异。因此了解各种不同类型的垃圾回收器以及它们的应用场景是非常重要的。

Serial Garbage Collector

串行垃圾回收器控制所有的应用线程。它是为单线程场景设计的,只使用一个线程来执行垃圾回收工作。它暂停所有应用线程来执行垃圾回收工作的方式不适用于服务器的应用环境。它最适用的是简单的命令行程序。

使用-XX:+UseSerialGCJVM参数来开启使用串行垃圾回收器。

Parallel Garbage Collector

并行垃圾回收器也称作基于吞吐量的回收器。它是JVM的默认垃圾回收器。与Serial不同的是,它使用多个线程来执行垃圾回收工作。和Serial回收器一样,它在执行垃圾回收工作是也需要暂停所有应用线程。

CMS Garbage Collector

并发标记清除(Concurrent Mark Sweep,CMS)垃圾回收器,使用多个线程来扫描堆内存并标记可被清除的对象,然后清除标记的对象。CMS垃圾回收器只在下面这两种情形下暂停工作线程,

  1. 在老年代中标记引用对象的时候

  2. 在做垃圾回收的过程中堆内存中有变化发生

对比与并行垃圾回收器,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

选项 描述
-XX:+UseSerialGC 串行垃圾回收器
-XX:+UseParallelGC 并行垃圾回收器
-XX:+UseConcMarkSweepGC CMS垃圾回收器
-XX:ParallesCMSThread= CMS垃圾回收器–使用的线程数量
-XX:UseG1GC G1垃圾回收器

GC 优化选项

选项 描述
-Xms 初始堆内存大小
-Xmx 最大堆内存大小
-Xmn 年轻代的大小
-XX:PermSize 初始永久代的大小
-XX:MaxPermSize 最大的永久代的大小

Example Usage of JVM GC Options

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar java-application.jar

















,如需转载请自行联系原作者


相关文章
|
1月前
|
JavaScript 前端开发 算法
Java Script 中的垃圾回收机制有哪些缺点
Java Script 中的垃圾回收机制有哪些缺点
13 0
|
2月前
|
算法 Java 关系型数据库
掌握这3个技巧,你也可以秒懂JAVA性能调优和jvm垃圾回收
JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JVM 为我们屏蔽了不同操作系统在底层硬件和操作指令的不同。
21 0
|
1月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制
【2月更文挑战第13天】 本文旨在深入剖析Java中的核心机制之一——垃圾回收(Garbage Collection, GC)。与传统的摘要不同,我们不会概述全文内容,而是直接点明文章将探讨的重点问题:如何合理利用垃圾回收机制优化Java应用性能。通过分析不同垃圾回收器的工作原理与特点,本文将指导开发者识别和处理内存泄漏,选择合适的垃圾回收策略,以及评估垃圾回收行为对应用性能的实际影响。
22 1
|
3天前
|
存储 缓存 监控
Java内存管理:垃圾回收与内存泄漏
【4月更文挑战第16天】本文探讨了Java的内存管理机制,重点在于垃圾回收和内存泄漏。垃圾回收通过标记-清除过程回收无用对象,Java提供了多种GC类型,如Serial、Parallel、CMS和G1。内存泄漏导致内存无法释放,常见原因包括静态集合、监听器、内部类、未关闭资源和缓存。内存泄漏影响性能,可能导致应用崩溃。避免内存泄漏的策略包括代码审查、使用分析工具、合理设计和及时释放资源。理解这些原理对开发高性能Java应用至关重要。
|
1月前
|
算法 Java UED
【JVM】分代收集算法:提升Java垃圾回收效率
【JVM】分代收集算法:提升Java垃圾回收效率
19 0
|
1月前
|
算法 Java 程序员
深入理解Java中的垃圾回收机制
【2月更文挑战第20天】在Java中,垃圾回收(Garbage Collection, GC)是一个自动的内存管理过程,负责识别并回收那些不再被使用的对象所占用的内存。这一机制极大地简化了程序的内存管理,减少了程序员因手动管理内存而可能引入的错误。然而,为了编写出更高效且对系统资源利用更加合理的Java应用程序,开发者需要对垃圾回收器的工作原理有深入的理解。本文将探讨Java垃圾回收的基本概念、常见的垃圾回收算法以及JVM中垃圾回收器的实际运作方式。
|
2月前
|
算法 Java 程序员
深入理解Java垃圾回收机制
【2月更文挑战第8天】在Java中,垃圾回收机制是自动化的,这意味着程序员不必手动管理内存。然而,了解垃圾回收机制是非常重要的,因为它可以帮助我们优化代码以及避免一些常见的性能问题。
20 3
|
2月前
|
算法 Java 程序员
Java的垃圾回收机制及其优化方法
【2月更文挑战第7天】垃圾回收是Java语言中一项重要的特性,它可以自动管理内存资源,避免了手动释放内存的繁琐过程。本文将介绍Java的垃圾回收机制、垃圾回收算法以及优化方法,帮助读者更好地理解和应用Java的垃圾回收技术。
|
2月前
|
监控 算法 Java
Java中的垃圾回收机制详解
Java中的垃圾回收机制详解
|
1天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)