Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion astro.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -702,7 +702,7 @@ export default defineConfig({
"java/advance/optimize/jvm/common",
"java/advance/optimize/jvm/dragonwell8",
"java/advance/optimize/jvm/dragonwell11",
"java/advance/optimize/jvm/openj9",
"java/advance/optimize/jvm/semeru",
"java/advance/optimize/jvm/graal",
"java/advance/optimize/jvm/zing"
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ title: 选择、下载和安装 Java
| Java 11 | [Dragonwell](https://dragonwell-jdk.io/) |
| Java 17 | [Azul Zulu](https://d10.injdk.cn/openjdk/zulu/17/) |
| Java 21 | [GraalVM](https://d10.injdk.cn/openjdk/graalvm/21/) / [Azul Zulu](https://d10.injdk.cn/openjdk/zulu/21/) |
| Java 24 | [GraalVM](https://d10.injdk.cn/openjdk/graalvm/24/) / [Azul Zulu](https://d10.injdk.cn/openjdk/zulu/24/) |
| Java 25 | [GraalVM](https://d10.injdk.cn/openjdk/graalvm/25/) / [Azul Zulu](https://d10.injdk.cn/openjdk/zulu/25/) |

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

Expand Down
6 changes: 3 additions & 3 deletions src/content/docs/java/advance/optimize/jvm/graal.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,19 @@ GraalVM 24 以上应该移除 `-Dgraal.OptWriteMotion=true` 参数,同时将 `
<!--markdownlint-disable line-length-->

```txt
-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
-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
```

### ZGC 参数

:::caution

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

:::

```txt
-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
-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
```

<!--markdownlint-enable line-length-->
38 changes: 19 additions & 19 deletions src/content/docs/java/advance/optimize/jvm/intro.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ flowchart TD
Windows --> 内存充足
内存充足 --> C[GraalVM Enterprise Edition]
Windows --> 内存不足
内存不足 --> OpenJ9
内存不足 --> Semeru
Java21 --> Linux
Linux --> 内存不足
Linux --> D[内存充足]
Expand Down Expand Up @@ -55,21 +55,20 @@ GraalVM 在 22.3.0 修复了所有已知的 Minecraft 错误

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

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

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

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

</TabItem>
<TabItem value="graalvm" label="GraalVM">

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

推荐下载最新版,也就是 Java 24
推荐下载最新版,也就是 Java 25

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

</TabItem>
<TabItem value="zing" label="Azul Zing">
<TabItem value="dragonwell" label="Dragonwell">

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

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

</TabItem>
<TabItem value="zulu" label="Azul Zulu">
<TabItem value="openj9" label="OpenJ9">

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

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

</TabItem>
<TabItem value="openj9" label="OpenJ9">
<TabItem value="zing" label="Azul Zing">

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

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

</TabItem>
</Tabs>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
---
title: OpenJ9
title: Semeru
---

OpenJ9 是完全重新设计的 JVM,拥有独立的垃圾回收系统,与 HotSpot JVM 的 G1GC、ZGC 等完全不同。
Semeru 是由 IBM 提供的 JDK 发行版,使用 OpenJ9 JVM 而非 HotSpot JVM。

OpenJ9 是一套遵循 Java 虚拟机规范、独立实现并重新设计的 JVM,拥有独立的内存管理机制和垃圾收集策略,和 HotSpot JVM 内的 G1GC、ZGC 不同。

:::caution

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

:::

:::danger

**重要兼容性说明**
:::danger[兼容性说明]

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

:::

## Paper 兼容性修复

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

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

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

Expand All @@ -31,19 +31,21 @@ spark:
enabled: false
```

### 方法二:启动参数
:::caution

禁用 Spark 后无法使用性能分析功能。

:::

添加参数:
### 方法二:使用插件版 Spark

添加 JVM 启动参数:

```txt
-Dpaper.preferSparkPlugin=true
```

:::caution

禁用 Spark 后无法使用性能分析功能。

:::
使核心优先选择 Spark 插件,而非内置的版本。

## 基础参数

Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/java/advance/optimize/jvm/zing.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,4 @@ C4 是 Zing 中唯一的垃圾收集器,取代了 OpenJDK 中可用的其他
这些参数未经测试,仅作为标记

- `-XX:+UseSpecialHashSet` 启用对特殊 HashSet 填充模式的优化,当输入集合的元素频繁添加到空 HashSet 时。
- `-XX:-OptimizeIdentityHashForDistribution` 启用 System.identityHashCode() 的替代实现,以牺份哈希计算速度为代价,提供更好的对象分布
- `-XX:-OptimizeIdentityHashForDistribution` 启用 `System.identityHashCode()` 的替代实现,以牺份哈希计算速度为代价,提供更好的对象分布
14 changes: 1 addition & 13 deletions src/content/docs/java/process/plugin/more/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,19 +55,7 @@ org.bukkit.plugin.InvalidPluginException: java.lang.UnsupportedClassVersionError

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

常用 Class Version 对应表

| Java 版本 | Class 文件版本 |
| --------- | -------------- |
| Java 7 | 51.0 |
| Java 8 | 52.0 |
| Java 11 | 55.0 |
| Java 16 | 60.0 |
| Java 17 | 61.0 |
| Java 21 | 65.0 |
| Java 22 | 66.0 |
| Java 23 | 67.0 |
| Java 24 | 68.0 |
你可以在 [这里](https://javaalmanac.io/bytecode/versions/) 找到 Class Version 和 Java 版本的对应表。

## 循环依赖

Expand Down
Loading