【发布时间】:2016-01-17 07:43:24
【问题描述】:
Java 8 的默认垃圾收集器是什么?
当我检查 JMX Beans 时,他们发现它是新一代的并行收集器和老一代的旧串行收集器。
【问题讨论】:
标签: java garbage-collection java-8
Java 8 的默认垃圾收集器是什么?
当我检查 JMX Beans 时,他们发现它是新一代的并行收集器和老一代的旧串行收集器。
【问题讨论】:
标签: java garbage-collection java-8
默认垃圾收集器:
【讨论】:
选择默认的垃圾收集器(除其他外)就是所谓的 JVM 的ergonomics 进程。此过程取决于您机器的类别。
由于几乎所有机器都有 2 个或更多 CPU,因此机器实际上总是被 JVM 视为服务器级。这就是为什么您会发现很多将并行收集器视为默认垃圾收集器的参考资料。
【讨论】:
Java 有四种类型的垃圾收集器(直到版本 10),但在 java 11 稳定发布后,它将是 5 种类型。它们是:-
S GC
P GC
CMS GC
G1 GC
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
【讨论】:
从 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
【讨论】:
UnlockExperimentalVMOptions,但在jdk 15 上不再需要了。 3. ParallelGC是JDK 8的默认GC,这里其实是个问题。
Since Java 8 until Java 15 the G1GC is the default even on Java 15,措辞不正确。 JDK 8默认是Parallel,你自己说的评论答案仍然错误。 Shenandoah 可以在 JDK 8 和 JDK 11 中使用,它被反向移植了。