Java 8的默认垃圾收集器

Cod*_*kie 83 java garbage-collection java-8

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

当我检查JMX Beans时,他们将它显示为新一代的并行收集器和旧一代的旧串行收集器.

x44*_*444 116

默认垃圾收集器:

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


Tun*_*aki 77

选择默认垃圾收集器(以及其他内容)就是所谓的JVM 的人体工程学过程.此过程取决于您的机器类.

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

由于几乎所有机器都有2个或更多CPU,因此JVM几乎总是将机器视为服务器级.这就是为什么你会发现很多引用都考虑到并行收集器是默认的垃圾收集器.


Bra*_*esh 42

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 GC

 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)
Run Code Online (Sandbox Code Playgroud)

有关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 
Run Code Online (Sandbox Code Playgroud)

如果要根据需要设置GC,可以通过以下命令执行此操作.在这里,我将G1 GC设置为默认GC.

$ java -XX:+UseG1GC -XX:+PrintCommandLineFlags -version 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

For more details , please visit 
Run Code Online (Sandbox Code Playgroud)

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(https://wiki.openjdk.java.net/display/zgc/Main) 指出“使用 -XX:+UnlockExperimentalVMOptions -XX:+使用 ZGC 选项启用 ZGC。” 这意味着它不是默认值。 (3认同)
  • 嗨@xagaffar这里是源url https://javapapers.com/java/types-of-java-garbage-collectors/ (2认同)
  • 图中的流程图对于解释“串行”、“并行”和“并发”垃圾收集器之间的区别确实很有用,但对于 G1 收集器来说,这九个彩色方块就显得非常无意义了。他们应该是什么意思?线程变成正方形? (2认同)