ChatGPT解决这个技术问题 Extra ChatGPT

Java 8 的默认垃圾收集器

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

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


C
Community

默认垃圾收集器:

Java 7 - 并行 GC

Java 8 - 并行 GC

Java 9 - G1 垃圾回收

Java 10 - G1 垃圾回收


作者没有为此答案添加任何来源。
T
Tunaki

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

对于服务器级机器,定义为具有 2 个或更多物理处理器和 2 个或更多 GB 物理内存(无论平台如何)的机器,默认垃圾收集器是并行收集器(也称为吞吐量收集器)。

对于客户端类机器,定义为 Windows 上的 32 位平台或单处理器机器,默认垃圾收集器是串行收集器。

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


B
Brajesh

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


提及图表的来源以获取更多详细信息将很有用
@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 收集器来说,这九个彩色方块变得非常荒谬。他们应该是什么意思?线程变成正方形?
c
chiperortiz

从 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


1、Shenandoah只适用于OpenJDK,Oracle没有。 2. ZGC 不是JDK 8 的默认GC,也不是JDK 11,仍然需要使用UnlockExperimentalVMOptions,但在jdk 15 上不再需要。 3. ParallelGC是JDK 8的默认GC,这其实是这里的问题。
我说从 Java 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