如何在 MacOS 上为 OpenJDK13 启用 Shenandoah 垃圾收集器

sbz*_*oom 5 java macos garbage-collection java-13 shenandoah

我的 Mac 上有最新的 (13.0.1) OpenJDK,但它似乎不包括 Shenandoah。我疯了吗?我知道已经发货了 它可以在我的 Linux 机器上运行。有不同的下载吗?不同的旗帜?

~ $ java -XX:+UnlockExperimentalVMOptions -XX:+PrintCommandLineFlags -version                                                                                                         
 -XX:G1ConcRefinementThreads=4 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=134217728  
 -XX:MaxHeapSize=2147483648 -XX:MinHeapSize=6815736 -XX:+PrintCommandLineFlags 
 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UnlockExperimentalVMOptions 
 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
~ $ java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+PrintCommandLineFlags -version                                                                                              
Error occurred during initialization of VM
Option -XX:+UseShenandoahGC not supported
Run Code Online (Sandbox Code Playgroud)

cbr*_*t02 4

我认为这篇 Red Hat 博客文章可能是相关的,特别是考虑到 Shenandoah 在您的 Linux 机器上运行,而不是在 macOS 上运行。

TL;DR:Red Hat 主导了 Shenandoah 的开发,因此 Oracle 对于是否将其放入 OpenJDK 犹豫不决。因此,并非所有版本都支持它。

  • 我几乎阅读了所有关于此的博客文章和新闻更新 - 它们都指的是 12 而不是 13。这是 12 中的一个实验性功能,因此您必须跳过一些障碍。但它“降落”在 13 号,所以它应该在那里。但我猜 Oracle 认为它仍然是“实验性的”,尽管有关它的文档为零。我删除了所有 JDK 并安装了 AdoptOpenJDK(由 RedHat https://adoptopenjdk.net/ 制造)并且它有效。伤心! (4认同)
  • 12 和 13 之间的区别在这里并不重要。Shenandoah 于 12 月登陆 OpenJDK 主线;13 是 12 中提供的内容的演变。构建系统默认启用所有受支持的 GC,因此每个不专门禁用 Shenandoah 的构建器都会获得包含它的二进制文件。到目前为止,只有 Oracle (OpenJDK) 版本禁用它。今天,下载任何(Oracle 除外)供应商的二进制文件都会为您提供 >=12 {x86_64, x86_32, aarch64} 中的 Shenandoah。 (2认同)