Java 8 的默认垃圾收集器是什么?
当我检查 JMX Beans 时,他们发现它是新一代的并行收集器和老一代的旧串行收集器。
默认垃圾收集器:
Java 7 - 并行 GC
Java 8 - 并行 GC
Java 9 - G1 垃圾回收
Java 10 - G1 垃圾回收
选择默认垃圾收集器(除其他外)是 JVM 的 ergonomics 进程。此过程取决于您机器的类别。
对于服务器级机器,定义为具有 2 个或更多物理处理器和 2 个或更多 GB 物理内存(无论平台如何)的机器,默认垃圾收集器是并行收集器(也称为吞吐量收集器)。
对于客户端类机器,定义为 Windows 上的 32 位平台或单处理器机器,默认垃圾收集器是串行收集器。
由于几乎所有机器都有 2 个或更多 CPU,因此机器实际上总是被 JVM 视为服务器级。这就是为什么您会发现很多将并行收集器视为默认垃圾收集器的参考资料。
Java 有四种类型的垃圾收集器(最高版本 10),但在 java 11 稳定发布后,它将是 5 种类型。这些是:-
串行垃圾收集器- S GC 并行垃圾收集器- P GC CMS 垃圾收集器- CMS GC G1 垃圾收集器- G1 GC Z 垃圾收集器- ZGC
java中GC的默认实现-
JVM GC Java 7 - P GC Java 8 - P GC Java 9 - G1 GC Java 10- G1 GC Java 11- Z GC(我不确定,但这将是 java 11 的默认 GC)
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
https://i.stack.imgur.com/XHfx0.jpg
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 可用打开 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 中使用,它被向后移植。
不定期副业成功案例分享