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

  • 相关阅读:
    AE 线编辑
    ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码
    AE二次开发技巧之撤销、重做
    ArcEngine数据编辑--选择要素
    java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)
    MVC开发模式详解
    数据库设计中常见表结构的设计技巧
    Eclipse 保存文件时自动格式化代码
    优化你的java代码性能
    Hibernate 与mybatis的区别
  • 原文地址:https://www.cnblogs.com/caibh/p/14636453.html
Copyright © 2020-2023  润新知