zoukankan      html  css  js  c++  java
  • 面试题: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进行讲解, 这里笔者(周志明)也采用这种方式。 ↩︎

  • 相关阅读:
    LeetCode:前K个高频单词【692】
    LeetCode:前K个高频元素【347】
    Java进阶教程:Lambda表达式与最佳实践
    《图说VR入门》——googleVR 他山之玉
    执行力:我的一些个人实践
    执行力:我的一些个人实践
    设计模式——迭代器模式详解
    P2P平台投宝金融跑路?为什么我没有中雷!
    P2P平台投宝金融跑路?为什么我没有中雷!
    NetWork——关于HTTP、HTTPS的知识总结
  • 原文地址:https://www.cnblogs.com/caibh/p/14636453.html
Copyright © 2011-2022 走看看