Loading...

面试题:JVM 默认垃圾回收器是什么

面试题:JVM 默认垃圾回收器是什么

要回答这个问题,自己写个Hello World测试一下就知道了,下面是在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


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

posted @ 2021-04-09 11:40  choizzzi  阅读(539)  评论(0编辑  收藏  举报