【问题标题】:Default garbage collector for Java 8Java 8 的默认垃圾收集器
【发布时间】:2016-01-17 07:43:24
【问题描述】:

Java 8 的默认垃圾收集器是什么?

当我检查 JMX Beans 时,他们发现它是新一代的并行收集器和老一代的旧串行收集器。

【问题讨论】:

    标签: java garbage-collection java-8


    【解决方案1】:

    默认垃圾收集器:

    • Java 7 - 并行 GC
    • Java 8 - 并行 GC
    • Java 9 - G1 GC
    • Java 10 - G1 GC

    【讨论】:

    【解决方案2】:

    选择默认的垃圾收集器(除其他外)就是所谓的 JVM 的ergonomics 进程。此过程取决于您机器的类别。

    • 对于服务器级机器,定义为具有 2 个或更多物理处理器和 2 个或更多 GB 物理内存的机器(无论平台如何),默认垃圾收集器是 parallel collector(也称为吞吐量收集器) .
    • 对于客户端类机器(在 Windows 上定义为 32 位平台或单处理器机器),默认垃圾收集器是串行收集器。

    由于几乎所有机器都有 2 个或更多 CPU,因此机器实际上总是被 JVM 视为服务器级。这就是为什么您会发现很多将并行收集器视为默认垃圾收集器的参考资料。

    【讨论】:

      【解决方案3】:

      Java 有四种类型的垃圾收集器(直到版本 10),但在 java 11 稳定发布后,它将是 5 种类型。它们是:-

      1. 串行垃圾收集器-S GC
      2. 并行垃圾收集器-P GC
      3. CMS 垃圾收集器-CMS GC
      4. G1 垃圾收集器-G1 GC
      5. Z 垃圾收集器-ZGC

      java中GC的默认实现-

      JVM 垃圾回收

       Java 7 - P GC       
       Java 8 - P GC
       Java 9 - G1 GC
       Java 10- G1 GC
       Java 11- Z GC(I am not sure but it would be default GC of java 11)
      

      更多ZGC详情,请访问

      http://openjdk.java.net/projects/zgc/

      https://www.opsian.com/blog/javas-new-zgc-is-very-exciting/

      注意:如果要验证JVM当前正在使用哪个GC,可以执行以下命令显示默认GC:-

      $ java -XX:+PrintCommandLineFlags -version 
      

      如果你想根据需要设置 GC,你可以通过下面的命令来设置。这里我将G1 GC设置为默认GC。

      $ java -XX:+UseG1GC -XX:+PrintCommandLineFlags -version 
      

      For more details , please visit 
      

      https://javapapers.com/java/types-of-java-garbage-collectors/

      https://alvinalexander.com/java/java-jvm-how-show-which-garbage-collector-running

      【讨论】:

      • 如果能提供更多详细信息,请提及图表的来源
      • @Brajesh 我不认为 ZGC 是 JDK 11 的默认 GC。打开 JDK wiki(wiki.openjdk.java.net/display/zgc/Main) 声明“使用 -XX:+UnlockExperimentalVMOptions -XX:+UseZGC 选项来启用 ZGC。 "这意味着它不是默认值。
      • 不,它不是JDK11的默认值。 -XX:+UnlockExperimentalVMOptions -XX:+UseZGC options to enable ZGC to unlock ZGC
      • 图片的流程图对于解释“串行”、“并行”和“并发”垃圾收集器之间的区别非常有用,但是对于 G1 来说,这九个彩色方块就变得非常荒谬了集电极。他们应该是什么意思?螺纹变成正方形?
      【解决方案4】:

      从 Java 9 到 Java 15,即使在 Java 15 上,G1GC 也是默认设置,Java 15 添加了两个新一代垃圾收集器,Oracle 开发的 ZGC 和红帽实现是 Shenandoah,两者都在 2020 年 9 月的 Java 15 中准备好生产。 ZGC 在 OPEN JDK 上可用https://wiki.openjdk.java.net/display/zgc/Main

      【讨论】:

      • 1. Shenandoah 只适用于 OpenJDK,Oracle 没有。 2. ZGC 不是JDK 8 的默认GC,也不是JDK 11,仍然需要使用UnlockExperimentalVMOptions,但在jdk 15 上不再需要了。 3. ParallelGC是JDK 8的默认GC,这里其实是个问题。
      • 我说从 Ja​​va 9 到 Java 15 G1GC 仍然是默认的......即使最近添加了 2 个新的 GC..
      • 没有。你说Since Java 8 until Java 15 the G1GC is the default even on Java 15,措辞不正确。 JDK 8默认是Parallel,你自己说的评论答案仍然错误。 Shenandoah 可以在 JDK 8 和 JDK 11 中使用,它被反向移植了。
      • 是的,对不起,我的意思是来自 Java 9
      猜你喜欢
      • 2016-05-27
      • 2011-11-07
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 2011-01-06
      相关资源
      最近更新 更多