Skip to content

Commit ab7fbcf

Browse files
authored
更新 JDK 推荐与排序,优化 GraalVM flag 并修正 Semeru 描述 (#102)
1 parent 4a337a8 commit ab7fbcf

File tree

7 files changed

+43
-53
lines changed

7 files changed

+43
-53
lines changed

astro.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@ export default defineConfig({
702702
"java/advance/optimize/jvm/common",
703703
"java/advance/optimize/jvm/dragonwell8",
704704
"java/advance/optimize/jvm/dragonwell11",
705-
"java/advance/optimize/jvm/openj9",
705+
"java/advance/optimize/jvm/semeru",
706706
"java/advance/optimize/jvm/graal",
707707
"java/advance/optimize/jvm/zing"
708708
]

src/content/docs/general/java/choose-and-download-and-install-java.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ title: 选择、下载和安装 Java
6262
| Java 11 | [Dragonwell](https://dragonwell-jdk.io/) |
6363
| Java 17 | [Azul Zulu](https://d10.injdk.cn/openjdk/zulu/17/) |
6464
| Java 21 | [GraalVM](https://d10.injdk.cn/openjdk/graalvm/21/) / [Azul Zulu](https://d10.injdk.cn/openjdk/zulu/21/) |
65-
| Java 24 | [GraalVM](https://d10.injdk.cn/openjdk/graalvm/24/) / [Azul Zulu](https://d10.injdk.cn/openjdk/zulu/24/) |
65+
| Java 25 | [GraalVM](https://d10.injdk.cn/openjdk/graalvm/25/) / [Azul Zulu](https://d10.injdk.cn/openjdk/zulu/25/) |
6666

6767
<!--markdownlint-enable line-length-->
6868

src/content/docs/java/advance/optimize/jvm/graal.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@ GraalVM 24 以上应该移除 `-Dgraal.OptWriteMotion=true` 参数,同时将 `
2121
<!--markdownlint-disable line-length-->
2222

2323
```txt
24-
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+ExplicitGCInvokesConcurrent -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1MixedGCLiveThresholdPercent=90 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -XX:+PerfDisableSharedMem -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseCriticalJavaThreadPriority -XX:AllocatePrefetchStyle=3 -XX:+AlwaysActAsServerClassMachine -XX:+EagerJVMCI -XX:+UseStringDeduplication -XX:+UseFastStosb -XX:+UseNewLongLShift -XX:+UseVectorCmov -XX:+UseXmmI2D -XX:+UseXmmI2F -XX:+AlignVector -XX:+OptimizeFill -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseVectorStubs -XX:UseAVX=2 -XX:UseSSE=4 -Dgraal.UsePriorityInlining=true -Dgraal.Vectorization=true -Dgraal.OptDuplication=true -Dgraal.DetectInvertedLoopsAsCounted=true -Dgraal.LoopInversion=true -Dgraal.VectorizeHashes=true -Dgraal.EnterprisePartialUnroll=true -Dgraal.VectorizeSIMD=true -Dgraal.StripMineNonCountedLoops=true -Dgraal.SpeculativeGuardMovement=true -Dgraal.TuneInlinerExploration=1 -Dgraal.LoopRotation=true -Dgraal.OptWriteMotion=true -Dgraal.WriteableCodeCache=true -Dgraal.CompilerConfiguration=enterprise
24+
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+ExplicitGCInvokesConcurrent -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1MixedGCLiveThresholdPercent=90 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -XX:+PerfDisableSharedMem -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseCriticalJavaThreadPriority -XX:AllocatePrefetchStyle=3 -XX:+AlwaysActAsServerClassMachine -XX:+EagerJVMCI -XX:+UseStringDeduplication -XX:+UseFastStosb -XX:+UseNewLongLShift -XX:+UseVectorCmov -XX:+UseXmmI2D -XX:+UseXmmI2F -XX:+AlignVector -XX:+OptimizeFill -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseVectorStubs -XX:UseAVX=2 -XX:UseSSE=4 -Dgraal.TuneInlinerExploration=1 -Dgraal.LoopRotation=true -Dgraal.OptWriteMotion=true -Dgraal.WriteableCodeCache=true -Dgraal.CompilerConfiguration=enterprise
2525
```
2626

2727
### ZGC 参数
2828

2929
:::caution
3030

31-
该参数最好用于 GraalVM 24 以上,GraalVM 24 添加了对 ZGC 的 JVMCI 支持
31+
该参数最好用于 GraalVM 25 及以上,GraalVM 24 添加了对 ZGC 的 JVMCI 支持
3232

3333
:::
3434

3535
```txt
36-
-XX:+UseZGC -XX:-ZProactive -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+ExplicitGCInvokesConcurrent -XX:+AlwaysPreTouch -XX:+PerfDisableSharedMem -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseCriticalJavaThreadPriority -XX:AllocatePrefetchStyle=3 -XX:+AlwaysActAsServerClassMachine -XX:+EagerJVMCI -XX:+UseStringDeduplication -XX:+UseFastStosb -XX:+UseNewLongLShift -XX:+UseVectorCmov -XX:+UseXmmI2D -XX:+UseXmmI2F -XX:+AlignVector -XX:+OptimizeFill -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseVectorStubs -XX:UseAVX=2 -XX:UseSSE=4 -Dgraal.UsePriorityInlining=true -Dgraal.Vectorization=true -Dgraal.DetectInvertedLoopsAsCounted=true -Dgraal.LoopInversion=true -Dgraal.VectorizeHashes=true -Dgraal.EnterprisePartialUnroll=true -Dgraal.VectorizeSIMD=true -Dgraal.TuneInlinerExploration=1 -Dgraal.LoopRotation=true -Dgraal.OptWriteMotion=true -Dgraal.CompilerConfiguration=enterprise
36+
-XX:+UseZGC -XX:-ZProactive -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+ExplicitGCInvokesConcurrent -XX:+AlwaysPreTouch -XX:+PerfDisableSharedMem -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseCriticalJavaThreadPriority -XX:AllocatePrefetchStyle=3 -XX:+AlwaysActAsServerClassMachine -XX:+EagerJVMCI -XX:+UseStringDeduplication -XX:+UseFastStosb -XX:+UseNewLongLShift -XX:+UseVectorCmov -XX:+UseXmmI2D -XX:+UseXmmI2F -XX:+AlignVector -XX:+OptimizeFill -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseVectorStubs -XX:UseAVX=2 -XX:UseSSE=4 -Dgraal.TuneInlinerExploration=1 -Dgraal.LoopRotation=true -Dgraal.CompilerConfiguration=enterprise
3737
```
3838

3939
<!--markdownlint-enable line-length-->

src/content/docs/java/advance/optimize/jvm/intro.mdx

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ flowchart TD
2020
Windows --> 内存充足
2121
内存充足 --> C[GraalVM Enterprise Edition]
2222
Windows --> 内存不足
23-
内存不足 --> OpenJ9
23+
内存不足 --> Semeru
2424
Java21 --> Linux
2525
Linux --> 内存不足
2626
Linux --> D[内存充足]
@@ -55,21 +55,20 @@ GraalVM 在 22.3.0 修复了所有已知的 Minecraft 错误
5555

5656
import { TabItem, Tabs } from "@astrojs/starlight/components";
5757

58-
<Tabs queryString="jvm-download">
59-
<TabItem value="dragonwell" label="Dragonwell">
58+
<Tabs queryString="jdk-download">
59+
<TabItem value="zulu" label="Azul Zulu">
6060

61-
Dragonwell 分为 Standard Edition 和 Extended Edition,推荐下载 Extended Edition
61+
Azul Zulu 支持 Java 8 以上,Java 7 和 6 需要成为客户才能下载
6262

63-
- [官网](https://dragonwell-jdk.io/) 下载区域选择 `China Mainland`
64-
- [Dragonwell 8 预览](https://github.com/dragonwell-project/dragonwell8/releases)
65-
- [Dragonwell 11 预览](https://github.com/dragonwell-project/dragonwell11/releases)
63+
- [官网](https://www.azul.com/downloads/?package=jdk&show-old-builds=true#zulu)
64+
- [下载镜像](https://d.injdk.cn/download/zulu)
6665

6766
</TabItem>
6867
<TabItem value="graalvm" label="GraalVM">
6968

7069
GraalVM 分为 Community Edition (CE) 和 Enterprise Edition (EE),除非你服务器大到会被 Oracle 找上门,不然请选择 Enterprise Edition
7170

72-
推荐下载最新版,也就是 Java 24
71+
推荐下载最新版,也就是 Java 25
7372

7473
- [下载 EE](https://www.graalvm.org/downloads/)
7574
- [下载 CE](https://github.com/graalvm/graalvm-ce-builds/releases/)
@@ -82,27 +81,28 @@ Oracle 官网同样提供 GraalVM,但是上面的 GraalVM EE 包含了企业
8281
:::
8382

8483
</TabItem>
85-
<TabItem value="zing" label="Azul Zing">
84+
<TabItem value="dragonwell" label="Dragonwell">
8685

87-
Azul Zing 不提供公开下载。如确认服务器性能已受到当前 JDK 的瓶颈限制,可提交试用申请表申请试用。
86+
Alibaba Dragonwell 分为 Standard Edition 和 Extended Edition,推荐下载 Extended Edition
8887

89-
[填写申请](https://www.azul.com/prime-trial)
88+
- [官网](https://dragonwell-jdk.io/) 下载区域选择 `China Mainland`
89+
- [Dragonwell 8 预览](https://github.com/dragonwell-project/dragonwell8/releases)
90+
- [Dragonwell 11 预览](https://github.com/dragonwell-project/dragonwell11/releases)
9091

9192
</TabItem>
92-
<TabItem value="zulu" label="Azul Zulu">
93+
<TabItem value="openj9" label="OpenJ9">
9394

94-
Azul Zulu 支持 Java 8 以上,Java 7 和 6 需要成为客户才能下载
95+
OpenJ9 有认证版和非认证版,主要是因为和 OpenJ9 和操作系统的关系而使用不同的许可证罢了,本质代码是一样的,直接下 `IBM Semeru Runtime Open Edition` 就行
9596

96-
- [官网](https://www.azul.com/downloads/?package=jdk&show-old-builds=true#zulu)
97-
- [下载镜像](https://d.injdk.cn/download/zulu)
97+
- [官网](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/)
98+
- [下载镜像](https://d.injdk.cn/download/ibm)
9899

99100
</TabItem>
100-
<TabItem value="openj9" label="OpenJ9">
101+
<TabItem value="zing" label="Azul Zing">
101102

102-
OpenJ9 有认证版和非认证版,主要是因为和 OpenJ9 的关系和操作系统的关系而使用不同的许可证罢了,本质代码是一样的,直接下 `IBM Semeru Runtime Open Edition` 就行
103+
Azul Zing 不提供公开下载。如确认服务器性能已受到当前 JDK 的瓶颈限制,可提交试用申请表申请试用。
103104

104-
- [官网](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/)
105-
- [下载镜像](https://d.injdk.cn/download/ibm)
105+
[填写申请](https://www.azul.com/prime-trial)
106106

107107
</TabItem>
108108
</Tabs>

src/content/docs/java/advance/optimize/jvm/openj9.md renamed to src/content/docs/java/advance/optimize/jvm/semeru.md

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
---
2-
title: OpenJ9
2+
title: Semeru
33
---
44

5-
OpenJ9 是完全重新设计的 JVM,拥有独立的垃圾回收系统,与 HotSpot JVM 的 G1GC、ZGC 等完全不同。
5+
Semeru 是由 IBM 提供的 JDK 发行版,使用 OpenJ9 JVM 而非 HotSpot JVM。
6+
7+
OpenJ9 是一套遵循 Java 虚拟机规范、独立实现并重新设计的 JVM,拥有独立的内存管理机制和垃圾收集策略,和 HotSpot JVM 内的 G1GC、ZGC 不同。
68

79
:::caution
810

911
这些参数的主要目的是降低内存占用,而非优化性能
1012

1113
:::
1214

13-
:::danger
14-
15-
**重要兼容性说明**
15+
:::danger[兼容性说明]
1616

17-
由于 Paper 服务端内置 Spark 性能分析器,而 Spark 与 OpenJ9 不兼容,因此默认情况下 **不能在 Paper 服务端上使用 OpenJ9**
17+
Paper 核心内置 Spark 性能分析器,这会导致和 OpenJ9 JVM 不兼容,因此默认情况下 **不推荐** 将 Semeru 用于 Paper 或其分支
1818

1919
:::
2020

2121
## Paper 兼容性修复
2222

23-
如需在 Paper 及其分支上使用 OpenJ9,需禁用内置 Spark:
23+
如需在 Paper 及其分支上使用 Semeru,你需要禁用内置 Spark:
2424

25-
### 方法一:配置文件(推荐)
25+
### 方法一:关闭内置 Spark(推荐)
2626

2727
`config/paper-global.yml` 中设置:
2828

@@ -31,19 +31,21 @@ spark:
3131
enabled: false
3232
```
3333
34-
### 方法二:启动参数
34+
:::caution
35+
36+
禁用 Spark 后无法使用性能分析功能。
37+
38+
:::
3539
36-
添加参数:
40+
### 方法二:使用插件版 Spark
41+
42+
添加 JVM 启动参数:
3743
3844
```txt
3945
-Dpaper.preferSparkPlugin=true
4046
```
4147

42-
:::caution
43-
44-
禁用 Spark 后无法使用性能分析功能。
45-
46-
:::
48+
使核心优先选择 Spark 插件,而非内置的版本。
4749

4850
## 基础参数
4951

src/content/docs/java/advance/optimize/jvm/zing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,4 @@ C4 是 Zing 中唯一的垃圾收集器,取代了 OpenJDK 中可用的其他
9595
这些参数未经测试,仅作为标记
9696

9797
- `-XX:+UseSpecialHashSet` 启用对特殊 HashSet 填充模式的优化,当输入集合的元素频繁添加到空 HashSet 时。
98-
- `-XX:-OptimizeIdentityHashForDistribution` 启用 System.identityHashCode() 的替代实现,以牺份哈希计算速度为代价,提供更好的对象分布
98+
- `-XX:-OptimizeIdentityHashForDistribution` 启用 `System.identityHashCode()` 的替代实现,以牺份哈希计算速度为代价,提供更好的对象分布

src/content/docs/java/process/plugin/more/faq.md

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,7 @@ org.bukkit.plugin.InvalidPluginException: java.lang.UnsupportedClassVersionError
5555

5656
`has been compiled by a more recent version of the Java Runtime (class file version <Class 版本>)` 就是你需要更新到的 Java 版本
5757

58-
常用 Class Version 对应表
59-
60-
| Java 版本 | Class 文件版本 |
61-
| --------- | -------------- |
62-
| Java 7 | 51.0 |
63-
| Java 8 | 52.0 |
64-
| Java 11 | 55.0 |
65-
| Java 16 | 60.0 |
66-
| Java 17 | 61.0 |
67-
| Java 21 | 65.0 |
68-
| Java 22 | 66.0 |
69-
| Java 23 | 67.0 |
70-
| Java 24 | 68.0 |
58+
你可以在 [这里](https://javaalmanac.io/bytecode/versions/) 找到 Class Version 和 Java 版本的对应表。
7159

7260
## 循环依赖
7361

0 commit comments

Comments
 (0)