Java 8的默认垃圾收集器


94

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

当我检查JMX Bean时,它们显示它是新一代的并行收集器,而旧的则是旧的串行收集器。

Answers:


128

默认垃圾收集器:

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

80

选择默认的垃圾收集器(除其他外)是JVM 的人体工程学过程。此过程取决于计算机的类。

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

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


54

Java具有四种类型的垃圾收集器(最高版本10),但是在稳定发行Java 11之后,它将是5种类型。这些是:-

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

GC在Java中的默认实现-

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)

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


提及该图的源以获取更多详细信息将很有用
xagaffar

2
您好@xagaffar,这里是源URL javapapers.com/java/types-of-java-garbage-collectors
Brajesh

2
@Brajesh我不认为ZGC是JDK 11.打开JDK维基的默认GC(wiki.openjdk.java.net/display/zgc/Main)指出:“使用-XX:+ UnlockExperimentalVMOptions -XX:+ UseZGC选项来启用ZGC。” 这意味着它不是默认值。
Ashish Kumar '18

1
不,它不是JDK11的默认值。-XX:+ UnlockExperimentalVMOptions -XX:+ UseZGC选项可启用ZGC解锁ZGC
vsingh

1
图片的流程图对于解释“串行”,“并行”和“并发”垃圾收集器之间的区别非常有用,但是对于G1收集器的这九个彩色正方形来说,这实在是毫无意义的。他们应该是什么意思?线程变成正方形?
Holger
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.