JVM 默认垃圾回收器是什么

本文通过一个简单的Java程序演示了在JDK8环境下如何查看默认的垃圾收集器参数,特别是-XX:+UseParallelGC参数。该参数开启后,使用的是ParallelScavenge+SerialOld收集器组合,其中ParallelScavenge负责年轻代,SerialOld负责老年代。尽管ParallelScavenge在实际中并不直接调用SerialOld,但它们的行为相似。周志明的《深入理解Java虚拟机第3版》对此进行了详细阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写个测试的Demo
下面是在JDK8环境下测试

# 生成 Demo.java 文件
$ cat > Demo.java << eof
public class Demo {
>   public static void main(String[] args){
>     System.out.println("hello...");
>   }
> }
> eof

# 编译出 Demo.class
$ javac Demo.java
# 执行 Demo.class
$ java -XX:+PrintCommandLineFlags Demo
-XX:InitialHeapSize=252930560 -XX:MaxHeapSize=4046888960 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC 
hello...

# 直接看看默认的参数配置
$ java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=252930560 -XX:MaxHeapSize=4046888960 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC 
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)

可以看到上面有一个-XX:+UseParallelGC参数,那么这个参数是什么意思?

周志明的《深入理解Java虚拟机 第3版》3.7.4章节 垃圾收集器参数总结给出了答案

UseParallel GC :	JDK 9 之前虚拟机运行在Server模式下的默认值,打开此开关后,使用 Parallel Scavenge + Serial Old (PS MarkSweep)[1] 的收集器组合进行内存回收

所以答案是:Parallel Scavenge + Serial Old

需要说明一下, Parallel Scavenge收集器架构中本身有PS MarkSweep收集器来进行老年代收集, 并非直接调用Serial Old收集器, 但是这个PS MarkSweep收集器与Serial Old的实现几乎是一样的, 所以在官方的许多资料中都是直接以Serial Old代替PS MarkSweep进行讲解, 这里笔者(周志明)也采用这种方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值