This commit is contained in:
lilingfengdev 2024-07-27 20:44:44 +08:00
parent b7c1c8080d
commit fa7df3c988
10 changed files with 446 additions and 315 deletions

View File

@ -116,6 +116,10 @@ entity-tracking-range:
使用 Paper 矿物混淆时候,尽量不要在 **非主世界** 开启 `mode 2``mode 3`
## 心跳连接
在`purpur.yml`中打开选项`use-alternate-keepalive`
---
# 性能优化

View File

@ -1,237 +0,0 @@
---
title: JVM 优化
sidebar_position: 7
---
# JVM 优化
## 参数
:::danger
所有的启动参数都必须被放在 `-jar` 前面否则会导致服务器无法启动
:::
以下是推荐的 JVM 优化参数(至少 Java 17 以上)
**以下启动参数需要自己补全内存分配(-Xms 和 -Xmx) 和 服务端核心名(-jar 服务端名字.jar)**
<details>
<summary>Mukul1127 Flag (ZGC) Plus - 4 核 8G 以上推荐</summary>
Mukul1127 Flag Plus 是现代的启动参数,使用 ZGC 作为垃圾回收,**注意:Mukul1127 Flag Plus 至少需要 4c8g 以上环境才可以发挥出优势,更低配置请使用 Aikar flag plus**Mukul1127 Flag Plus 需要 Java 17 以上!
```shell
java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseFMA -XX:+UseVectorCmov -XX:+UseNewLongLShift -XX:+UseFastStosb -XX:+SegmentedCodeCache -XX:+OptimizeStringConcat -XX:+DoEscapeAnalysis -XX:+OmitStackTraceInFastThrow -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:+UseZGC -XX:AllocatePrefetchStyle=1 -XX:-ZProactive
```
如果你使用 Java 21 以上,你可以将`-XX:-ZProactive`换`-XX:+ZGenerational`Java 22 以上必须切换
</details>
<details>
<summary>Mukul1127 (ZGC) Flag - 使用 GraalVM 时推荐</summary>
GraalVM Java 17+ 的参数,
```shell
java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseFMA -XX:+UseVectorCmov -XX:+UseNewLongLShift -XX:+UseFastStosb -XX:+SegmentedCodeCache -XX:+OptimizeStringConcat -XX:+DoEscapeAnalysis -XX:+OmitStackTraceInFastThrow -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:AllocatePrefetchStyle=3 -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:+EagerJVMCI -Dgraal.TuneInlinerExploration=1 -XX:+UseZGC -XX:AllocatePrefetchStyle=1 -XX:-ZProactive
```
如果你使用 Java 21 以上,你可以将 `-XX:-ZProactive` 换为 `-XX:+ZGenerational` Java 22 以上必须切换
### 以下是额外选项
更激进的内联,在 Graal 中通过 `-Dgraal.BaseTargetSpending=160` (默认为 120和 OpenJDK 中的其他一些标志。具有较大缓存的 CPU 可能会从中受益。
`-Dgraal.OptWriteMotion=true``-Dgraal.WriteableCodeCache=true` ,它们看起来不稳定,但在 GraalVM 22.3.0+ 中可能更稳定
</details>
<details>
<summary>Mukul1127 Flag (G1GC)</summary>
```shell
java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseFMA -XX:+UseVectorCmov -XX:+UseNewLongLShift -XX:+UseFastStosb -XX:+SegmentedCodeCache -XX:+OptimizeStringConcat -XX:+DoEscapeAnalysis -XX:+OmitStackTraceInFastThrow -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3 -XX:+UseG1GC -XX:MaxGCPauseMillis=37 -XX:+PerfDisableSharedMem -XX:G1HeapRegionSize=16M -XX:G1NewSizePercent=23 -XX:G1ReservePercent=20 -XX:SurvivorRatio=32 -XX:G1MixedGCCountTarget=3 -XX:G1HeapWastePercent=20 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5.0 -XX:GCTimeRatio=99 -XX:G1ConcRefinementServiceIntervalMillis=150 -XX:G1ConcRSHotCardLimit=16
```
</details>
## 通用
### 内存优化
如果服务器内存足够,可以加上此参数 `-XX:-ZUncommit` ,要求 JVM 总是提前把要用的内存申请好,
并且阻止 JVM 把临时空出来的内存还给系统。这会加快短时间有大量内存的需求时的速度。
### 大页支持
注意在 WINDOWS 上使用大页,必须要以管理员启动
当然,在动手前,让我们先试一试是不是系统已经支持了这项功能 ,在控制台执行此命令
```shell
java -Xlog:gc+init -XX:+UseLargePages -Xmx1g -version
```
如果出现了以下字样,那么说明不完全兼容:
```shell
UseLargePages disabled no large pages configured and available on the system.
```
那么就说明当前系统并不支持大页,不过不要急,可以试一下这一行命令:
```shell
java -Xlog:gc+init -XX:+UseTransparentHugePages -Xmx1g -version
```
如果看到 `Large Page Support: Enabled (Transparent)` ,表示你的系统支持透明大页
但是如果你依然不支持或者想要追求极致性能,可以去百度搜索当前的系统如何开启大页,
这里就不再过多的赘述了。(LargePages 对服务器提升相当巨大,在我的电脑上,它提升了 50%的性能)
如果支持 LargePages ,加上此参数
```shell
-XX:+UseLargePages -XX:LargePageSizeInBytes=2m -XX:+UseHugeTLBFS
```
如果支持 TransparentHugePages (不要把两个都加上,优先 LargePages),加上此参数
```shell
-XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2m -XX:+UseHugeTLBFS
```
:::tip
在某些服务器上,开启大页后,会延长 JVM 的启动时间,时间从十秒到十分钟不等
:::
### SIMD
如果你使用的是 Pufferfish 的分支(PurpurLeafLeavesGale),你可以添加此参数
```shell
--add-modules=jdk.incubator.vector
```
### 下载源加速
默认的 SpigotLibraryLoader 下载源在国内访问很慢,如果你使用的是 Leaf你可以添加参数使用国内下载源
```shell
-DLeaf.library-download-repo=https://maven.aliyun.com/repository/public
```
### 中文编码
防止乱码
```shell
-Dfile.encoding=UTF-8
```
### 删除垃圾信息
(仅适合 Leaf 或者 Gale)
```shell
-Dgale.log.warning.root=false -Dgale.log.warning.offline.mode=false
```
### 更快的安全随机数发生
```shell
-Djava.security.egd=file:/dev/urandom
```
### 异步日志
```shell
-Xlog:async
```
异步日志记录可能会导致日志记录的顺序不确定
### 更长的 KeepAlive 时间
```shell
-Dpaper.playerconnection.keepalive=60
```
如果你的网络不好,可以适当延长 keepalive 时间,打开[alternate-keepalive](go.md#use-alternate-keepalive)
## 参数解释
### ZGC 与 G1GC
废话不说,直接上图
ZGC
![](_images/zgc.png)
G1GC
![](_images/g1gc.png)
显然,单次 GC 时间从 32ms 降到 0.012ms
:::tip
你可能会发现`ZGC Cycle Time`很长,但其实你不用关心,因为没有停顿主线程,你只需要关心`ZGC Pause Time`即可
:::
## JDK
对各种 JDK 构建的性能测试
在经过冰块大佬,llf的测试后,我们得出了在 Java 21 上对各个 JDK 的性能排行
### 性能
按照测试结果高到低排序
#### Azul Platform Primes(Zing)
Azul 开发的一款超高性能的 JDK,测试时,我们发现 Zing **第一次**初始性能并不如 Zulu,GraalVM ,但是在测试机上,大约十分钟后 Azul 性能开始反超 Zulu,GraalVM
**注意:如果你使用 Azul,那就不要使用上述任何优化参数,并且,该JDK仅能用于Linux**
目前有点小小的兼容性问题,模组服就不要尝试了
优化参数我们还在探索
#### GraalVM
新神,实测区块生成比 Zulu 快了 10%(其他指标由于没有Nigger没测),JS 执行性能是 Nashorn 两倍以上
#### Zulu OpenJDK
老牌性能神,比 Oracle JDK 快了 20 - 30%
BellSoft Liberica JDK 和 Adoptium Eclipse Temurin 在 MC 上的性能表现不如前三个
### 内存占用
#### IBM OpenJ9
内存占用最小,但是性能非常不好,适合在低内存环境使用
### 不推荐的
* OpenJDK builds by Oracle
* Oracle Java SE Development Kit
* AdoptOpenJDK
* Amazon Corretto
* Microsoft Build of OpenJDK
* 阿里巴巴 Dragonwell
* SapMachine
* Red Hat OpenJDK
* ojdkbuild

View File

@ -0,0 +1,107 @@
---
sidebar_position: 2
title: 通用优化参数
slug: /optimize/jvm/common
---
# 通用参数
## 大页支持
注意在 WINDOWS 上使用大页,必须要以管理员启动
当然,在动手前,让我们先试一试是不是系统已经支持了这项功能 ,在控制台执行此命令
```shell
java -Xlog:gc+init -XX:+UseLargePages -Xmx1g -version
```
如果出现了以下字样,那么说明不完全兼容:
```shell
UseLargePages disabled no large pages configured and available on the system.
```
那么就说明当前系统并不支持大页,不过不要急,可以试一下这一行命令:
```shell
java -Xlog:gc+init -XX:+UseTransparentHugePages -Xmx1g -version
```
如果看到 `Large Page Support: Enabled (Transparent)` ,表示你的系统支持透明大页
但是如果你依然不支持或者想要追求极致性能,可以去百度搜索当前的系统如何开启大页,
这里就不再过多的赘述了。(LargePages 对服务器提升相当巨大,在我的电脑上,它提升了 50%的性能)
如果支持 LargePages ,加上此参数
```shell
-XX:+UseLargePages -XX:LargePageSizeInBytes=2m
```
如果支持 TransparentHugePages (不要把两个都加上,优先 LargePages),加上此参数
```shell
-XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2m
```
:::tip
在某些服务器上,开启大页后,会延长 JVM 的启动时间,时间从十秒到十分钟不等
:::
## SIMD
如果你使用的是 Pufferfish 的分支(PurpurLeafLeavesGale),你可以添加此参数
```shell
--add-modules=jdk.incubator.vector
```
## 下载源加速
默认的 SpigotLibraryLoader 下载源在国内访问很慢,如果你使用的是 Leaf你可以添加参数使用国内下载源
```shell
-DLeaf.library-download-repo=https://maven.aliyun.com/repository/public
```
## 中文编码
防止乱码
```shell
-Dfile.encoding=UTF-8
```
## 删除垃圾信息
(仅适合 Leaf 或者 Gale)
```shell
-Dgale.log.warning.root=false -Dgale.log.warning.offline.mode=false
```
## 更快的安全随机数发生
```shell
-Djava.security.egd=file:/dev/urandom
```
## 异步日志
```shell
-Xlog:async
```
异步日志记录可能会导致日志记录的顺序不确定
### 更长的 KeepAlive 时间
```shell
-Dpaper.playerconnection.keepalive=60
```
如果你的网络不好,可以适当延长 keepalive 时间,打开[alternate-keepalive](/docs-java/process/maintenance/optimize/go.md#心跳连接)

View File

@ -0,0 +1,53 @@
---
sidebar_position: 4
title: Dragonwell 11
slug: /optimize/jvm/dragonwell
---
# Dragonwell 11
这些参数只适合 Dragonwell 11
## 基础
```shell
-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3
```
这些是基础参数
## ZGC
Dragonwell11 的 ZGC 不同于 OpenJDK11 的 ZGC,Dragonwell 通过移植 OpenJDK 15+的 ZGC补丁使得Dragonwell的ZGC可以投入生产环境
添加参数 `-XX:+UseZGC -XX:AllocatePrefetchStyle=1`以启用
## G1GC
添加参数
```shell
-XX:+UseG1GC -XX:MaxGCPauseMillis=130 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=20 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1ConcRefinementServiceIntervalMillis=150 -XX:G1ConcRSHotCardLimit=16
```
## 内联优化
添加参数`-XX:+UseVtableBasedCHA`
## 对象头压缩
可以节约10%左右的Java对象内存占用并可能提升程序性能。**目前仅支持G1GC和ParallelGC**
添加参数`-XX:+UseCompactObjectHeaders`
## Wisp
Wisp在JVM上提供了一种用户态的线程实现。开启Wisp2后Java线程不再简单地映射到内核级线程而是对应到一个协程JVM在少量内核线上调度大量协程执行以减少内核的调度开销
只需添加JVM参数即可开启Wisp2,无需更改程序!!
**仅支持Linux x64**
添加参数`-XX:+UnlockExperimentalVMOptions -XX:+UseWisp2`

View File

@ -0,0 +1,64 @@
---
sidebar_position: 3
title: Dragonwell 8
slug: /optimize/jvm/dragonwell8
---
# Dragonwell 8
这些参数只适合 Dragonwell 8
## 基础
```shell
-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+ParallelRefProcEnabled -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:+PerfDisableSharedMem -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:MaxInlineLevel=15 -XX:MaxVectorSize=32 -XX:+UseCompressedOops -XX:ThreadPriorityPolicy=1 -XX:+UseDynamicNumberOfGCThreads -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=350M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseFPUForSpilling
```
这些是基础参数
x86 Java 8 用户可以添加以下附加参数:
```shell
-XX:+UseXMMForArrayCopy
```
G1GC 参数
```shell
-XX:+UseG1GC -XX:MaxGCPauseMillis=130 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=20 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30
```
## JWarmup
JWarmup的基本原理: 根据前一次程序运行的情况记录下热点方法、类编译顺序等信息在应用下一次启动的时候积极加载相关的类并积极编译相关的方法进而应用启动后可以直接运行编译好的Java代码(C2编译
### 使用步骤
#### 记录阶段(一般是beta环境),在5分钟后生成profiling data
添加参数`-XX:-ClassUnloading -XX:-CMSClassUnloadingEnabled -XX:-ClassUnloadingWithConcurrentMark -XX:CompilationWarmUpLogfile=jwarmup.log -XX:+CompilationWarmUpRecording -XX:CompilationWarmUpRecordTime=300`
#### 使用阶段(一般是生产环境)
添加参数`-XX:+CompilationWarmUp -XX:-TieredCompilation -XX:CompilationWarmUpLogfile=jwarmup.log -XX:CompilationWarmUpDeoptTime=0`
## 对象头压缩
可以节约10%左右的Java对象内存占用并可能提升程序性能。
添加参数`-XX:+UseCompactObjectHeaders`
## Wisp
Wisp在JVM上提供了一种用户态的线程实现。开启Wisp2后Java线程不再简单地映射到内核级线程而是对应到一个协程JVM在少量内核线上调度大量协程执行以减少内核的调度开销
只需添加JVM参数即可开启Wisp2,无需更改程序!!
**仅支持Linux x64**
添加参数`-XX:+UnlockExperimentalVMOptions -XX:+UseWisp2`
## G1ElasticHeap
G1ElasticHeap 是一种 GC 功能,用于将 Java 堆的内存返回给操作系统,以减少 Java 进程的内存占用。要启用此功能,您需要通过以下选项使用 G1 GC`-XX:+G1ElasticHeap -XX:+ElasticHeapPeriodicUncommit`

View File

@ -0,0 +1,39 @@
---
sidebar_position: 5
title: GraalVM EE
slug: /optimize/jvm/graalvm
---
# GraalVM
这些参数只适合 GraalVM EE
## 基础参数
```shell
-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:AllocatePrefetchStyle=3 -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:+EagerJVMCI -Dgraal.TuneInlinerExploration=1
```
## GraalVM Mod兼容
GraalVM EE 22.3.0 修复了所有已知的 Minecraft 错误
## G1GC
```shell
-XX:+UseG1GC -XX:MaxGCPauseMillis=130 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=20 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1ConcRefinementServiceIntervalMillis=150 -XX:G1ConcRSHotCardLimit=16
```
## ZGC
```shell
-XX:+UseZGC -XX:AllocatePrefetchStyle=1 -XX:+ZGenerational
```
## 正在考虑的标志
更激进的内联,在 Graal 中通过`-Dgraal.BaseTargetSpending=160`(默认为 120和 OpenJDK 中的其他一些标志。具有较大缓存的 CPU 可能会从中受益
`-Dgraal.OptWriteMotion=true`和`-Dgraal.WriteableCodeCache=true` ,看起来不稳定,但在 GraalVM 22.3.0 中可能更稳定,显然针对Mod
~~神无需优化~~

View File

@ -0,0 +1,56 @@
---
sidebar_position: 1
title: JVM 优化
slug: /optimize/jvm
---
# JVM 优化
这篇文章可以说是整个笨蛋文档中编写历时最久的(),为了确保正确性,我们在Windows和Linux 上进行了大量性能测试,结果可以说是十分出人意料
这场测试的细节和日志,报告,Spark,GCLog等可以在[Test - Java](https://github.com/lilingfengdev/Test-Java)找到
## Java 选择
```mermaid
flowchart TD
A[选择]
A --> Java8
A --> Java11
A --> Java21
Java8 --> Dragonwell
Java11 --> Dragonwell
Java21 --> Windows
Windows --> 内存充足
内存充足 --> GraalVMEE
Windows --> 内存不足
内存不足 --> AmazonCorretto
Java21 --> Linux
Linux --> 等待测试
```
这可能与你想的不太一样
Zulu 被淘汰了,这是事实
## 垃圾回收器
经过我们的多次测试G1GC和ZGC 最适合MC服务器(还有一个 Zing C4)
选择!
```mermaid
flowchart TD
A[选择]
A --> 机器配置足够,起步4h8g,推荐8h8g
A --> 机器配置不达标
机器配置足够,起步4h8g,推荐8h8g --> Java21,或者Dragonwell11
机器配置足够,起步4h8g,推荐8h8g --> 其他版本
Java21,或者Dragonwell11 --> ZGC
其他版本 --> G1GC
机器配置不达标 --> G1GC
```
ZGC 的无停顿可以给玩家带来更好的体验,并且更充分的利用多核
对于 GC 细节性的优化请阅读每个Java的优化指南

View File

@ -0,0 +1,53 @@
---
sidebar_position: 6
title: Azul Zing
slug: /optimize/jvm/zing
---
# Azul Zing
~~神无需优化~~
通用内容的参数可以使用(比如大页),但不要自行指定GC,或其他优化参数
## ReadyNow
你大概已经注意到了,Zing的预热期很长ReadyNow就是来解决这个问题的
若要启用 ReadyNow请添加以下命令行选项其中两者`<file>`通常相同:
`-XX:ProfileLogIn=<file>` 指示 Azul Platform Prime 使用现有配置文件日志中的信息。
`-XX:ProfileLogOut=<file>` 记录之前的编译和运行中的去优化决策。
然后,运行应用程序将自动生成或更新配置文件日志。此配置文件日志将在应用程序的后续运行时使用,从而改进预热。
官方推荐所有重要函数执行**5万遍**
添加`-XX:+FalconUseCompileStashing`以使用编译存储
## 垃圾回收器
C4 是 Zing 中唯一的垃圾收集器,取代了 OpenJDK 中可用的其他垃圾收集器。
## 紧凑字符串
添加选项`-XX:+CompactStrings`可减少内存占用,提高字符串密集型应用程序的性能,并减少花费在垃圾回收上的时间
## Zing System Tool
这玩意可以让你的系统更加适应Zing,可以自动优化系统配置,开启大页,但很可惜,这需要成为付费客户,等待富哥
## 下载
虽然需要公司账户,但我们通过神秘手段搞到了安装包,都是JDK
(放心没毒下载源都是cdn.azul.com(Azul官方网站))
[RPM](https://cdn.azul.com/zing-zvm/ZVM24.06.0.0/zing24.06.0.0-2-jdk21.0.3-linux.x86_64.rpm)
[TAR.GZ](https://cdn.azul.com/zing-zvm/ZVM24.06.0.0/zing24.06.0.0-2-jdk21.0.3-linux_x64.tar.gz)
[DEB](https://cdn.azul.com/zing-zvm/ZVM24.06.0.0/zing24.06.0.0-2-jdk21.0.3-linux_amd64.deb)

View File

@ -57,15 +57,15 @@ Purpur 还原了 Minecraft 的部分特性,用来开生存服务器更加适
### 插件服核心推荐
| 名称 | 介绍 | 推荐与否 | 下载镜像 | 支持的MC版本 |
| --- | ----------- | --- | --- |-----------|
| [Paper](https://papermc.io/) | 稳定性最好的核心,但是性能在高版本不太好 | 推荐 | [McRes](https://mcres.cn/downloads/paper.html) [FastMirror](https://www.fastmirror.net/#/download/Paper) [原子云](https://res.nullatom.com/Minecraft/Server/Paper/) | 1.8.8-最新 |
| [Purpur](https://purpurmc.org) | 高版本最推荐的插件端核心,拥有较好的性能和稳定性,是开服务器的不二之选 | 推荐 | [McRes](https://mcres.cn/downloads/purpur.html) [FastMirror](https://www.fastmirror.net/#/download/Purpur) | 1.16.5-最新 |
| [Leaves](https://leavesmc.org/) | Leaves就是生电版的paper他完全支持paper能使用的全部插件相比paper拥有更强的优化和生电向特性支持。leaves基本完全支持客户端生电 Mod 包括但不限于carpetpca投影共享原理图minihudbborommcxaero小地图jadeappleskin等| 非常推荐 | [官方网站](https://leavesmc.org/downloads/leaves) [McRes](https://mcres.cn/downloads/leaves.html) | 1.17.1-最新(1.19以前不推荐用,那个时候没啥功能) |
| [Leaf](https://github.com/Winds-Studio/Leaf) | 基于Gale拥有非常棒的性能叶子支持中文名进服拥有较好的稳定性国人开发 | 非常推荐 | [McRes](https://mcres.cn/downloads/leaf.html) | 1.19.3-最新 |
| [PandaSpigot](https://github.com/hpfxd/PandaSpigot) | paper1.8.8的fork此核心只有1.8版本可用于开PVP服务器含大量konckback配置选项 | 推荐 | [McRes](https://vip.123pan.cn/1821558579/Lingyi/core/pandaspigot-116-mcres.cn.jar) | 1.8 |
| [SportPaper](https://github.com/Electroid/SportPaper) | paper1.8.8的fork此核心只有1.8版本拥有较好的性能和很多生存配置选项如果你不需要开PVP你可以选择这个核心 | 推荐 | [青草云MC](https://qcymc.cloud/f/ERGcp/sportpaper-1.8.8-R0.1-SNAPSHOT.jar) | 1.8 |
| [Beast](https://github.com/HomoMC/Beast) | Paper 1.12.2 分支旨在提供极致性能、错误修复和改进。推荐使用Java 21以上 | 推荐 | [青草云MC](https://qcymc.cloud/f/G6ziA/beast-1.12.2.jar) | 1.12.2 |
| 名称 | 介绍 | 推荐与否 | 下载镜像 | 支持的MC版本 |
|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------|
| [Paper](https://papermc.io/) | 稳定性最好的核心,但是性能在高版本不太好 | 推荐 | [McRes](https://mcres.cn/downloads/paper.html) [FastMirror](https://www.fastmirror.net/#/download/Paper) [原子云](https://res.nullatom.com/Minecraft/Server/Paper/) | 1.8.8-最新 |
| [Purpur](https://purpurmc.org) | 高版本最推荐的插件端核心,拥有较好的性能和稳定性,是开服务器的不二之选 | 推荐 | [McRes](https://mcres.cn/downloads/purpur.html) [FastMirror](https://www.fastmirror.net/#/download/Purpur) | 1.16.5-最新 |
| [Leaves](https://leavesmc.org/) | Leaves就是生电版的paper他完全支持paper能使用的全部插件相比paper拥有更强的优化和生电向特性支持。leaves基本完全支持客户端生电 Mod 包括但不限于carpetpca投影共享原理图minihudbborommcxaero小地图jadeappleskin等 | 非常推荐 | [官方网站](https://leavesmc.org/downloads/leaves) [McRes](https://mcres.cn/downloads/leaves.html) | 1.17.1-最新(1.19以前不推荐用,那个时候没啥功能) |
| [Leaf](https://github.com/Winds-Studio/Leaf) | 基于Gale拥有非常棒的性能叶子支持中文名进服拥有较好的稳定性国人开发 | 非常推荐 | [McRes](https://mcres.cn/downloads/leaf.html) | 1.19.3-最新 |
| [PandaSpigot](https://github.com/hpfxd/PandaSpigot) | paper1.8.8的fork此核心只有1.8版本可用于开PVP服务器含大量konckback配置选项 | 推荐 | [McRes](https://vip.123pan.cn/1821558579/Lingyi/core/pandaspigot-116-mcres.cn.jar) | 1.8 |
| [SportPaper](https://github.com/Electroid/SportPaper) | paper1.8.8的fork此核心只有1.8版本拥有较好的性能和很多生存配置选项如果你不需要开PVP你可以选择这个核心 | 推荐 | [青草云MC](https://qcymc.cloud/f/ERGcp/sportpaper-1.8.8-R0.1-SNAPSHOT.jar) | 1.8 |
| [Beast](https://github.com/HomoMC/Beast) | Paper 1.12.2 分支旨在提供极致性能、错误修复和改进。推荐使用Java 21以上 | 推荐 | [青草云MC](https://qcymc.cloud/f/G6ziA/beast-1.12.2.jar) | 1.12.2 |
:::info
@ -73,28 +73,37 @@ Purpur 还原了 Minecraft 的部分特性,用来开生存服务器更加适
:::
<details>
<summary>高版本不同服务端核心的比较</summary>
如果你不知道怎么选,我们为你提供一个简单的方法(:
# 性能
Leaf > Purpur > Paper
Leaves 参与比较是很愚蠢的,它的性能介于 Purpur Paper之间
# 兼容
Paper = Purpur > Leaf /Leaves
Leaves 由于假人的存在会不兼容部分老的插件比如Authme官方版本
# 生电
Leaves > Leaf > Purpur > Paper
Leaf 相比于 Purpur 多了生电模组兼容,没多什么特性
</details>
```mermaid
flowchart TD
A[服务端版本]
A --> 1.8
A --> 1.12.2
A --> 1.16.5+
1.8 --> PVP
PVP --> PandaSpigot
1.8 --> 生存
生存 --> SportPaper
1.12.2 --> 性能
性能 --> Beast
1.12.2 --> 稳定
稳定 --> Paper
1.16.5+ --> 生电
生电 --> 1.18以下
生电 --> 1.18以上
1.18以下 --> Purpur
1.18以上 --> 假人,以及一些偏门的特性
假人,以及一些偏门的特性 -->|需要| Leaves
假人,以及一些偏门的特性 -->|不需要| Leaf
1.16.5+ --> 高性能
高性能 --> 1.19以上
1.19以上 --> Leaf
高性能 --> 1.19以下
1.19以下 --> Purpur
1.16.5+ --> 其他
其他 --> Purpur
```
:::danger
@ -102,10 +111,10 @@ Leaf 相比于 Purpur 多了生电模组兼容,没多什么特性
:::
| 名称 | 介绍 |
| --- | ----------- |
| [CraftBukkit](https://getbukkit.org/download/craftbukkit) | 插件端鼻祖核心,无优化 |
| [Spigot](https://getbukkit.org/download/spigot/) | CraftBukkit的分支有一点优化仍不推荐 |
| 名称 | 介绍 |
|-----------------------------------------------------------|---------------------------|
| [CraftBukkit](https://getbukkit.org/download/craftbukkit) | 插件端鼻祖核心,无优化 |
| [Spigot](https://getbukkit.org/download/spigot/) | CraftBukkit的分支有一点优化仍不推荐 |
:::danger
@ -129,22 +138,22 @@ Leaf 相比于 Purpur 多了生电模组兼容,没多什么特性
#### Forge混合端
| 名称 | 介绍 | 推荐与否 | 下载镜像 | 支持版本 |
|---------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|
| [Crucible](https://github.com/CrucibleMC/Crucible) | Thermos的分支目前还在积极维护完全兼容Thermos | 推荐 | [McRes](https://www.123pan.com/s/HRhfjv-3ey8v.html)[青草云MC(推荐)](https://qcymc.cloud/f/gJRFG/Crucible-1.7.10-staging-0c25d250-server.jar)([library文件](https://github.moeyy.xyz/https://github.com/CrucibleMC/Crucible/releases/download/staging-0c25d25/libraries.zip)) | 1.7.10 |
| 名称 | 介绍 | 推荐与否 | 下载镜像 | 支持版本 |
|---------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|
| [Crucible](https://github.com/CrucibleMC/Crucible) | Thermos的分支目前还在积极维护完全兼容Thermos | 推荐 | [McRes](https://www.123pan.com/s/HRhfjv-3ey8v.html)[青草云MC(推荐)](https://qcymc.cloud/f/gJRFG/Crucible-1.7.10-staging-0c25d250-server.jar)([library文件](https://github.moeyy.xyz/https://github.com/CrucibleMC/Crucible/releases/download/staging-0c25d25/libraries.zip)) | 1.7.10 |
| [CatServer](https://catmc.org/) | (推荐,但我真不喜欢核心内置广告)。既可以加入 Mod 又可以加入插件缺点:部分插件不支持,部分 Mod 不支持; Mod 和插件在一起运行难免出现一些七七八八的 bug。 | 推荐1.12.2 | [McRes](https://mcres.cn/downloads/catserver.html) [FastMirror](https://www.fastmirror.net/#/download/CatServer) | 1.12.2/1.16.5/1.18.2/ |
| [Mohist](https://mohistmc.com/software/mohist) | 兼容paper的一些插件支持兼容 Mod 和插件;缺点:比较多插件不支持,部分 Mod 不支持; Mod 和插件在一起运行难免出现一些七七八八的 bug。 | 推荐高版本 | [McRes](https://mcres.cn/downloads/mohist.html) [FastMirror](https://www.fastmirror.net/#/download/Mohist) [原子云](https://res.nullatom.com/Minecraft/Server/Mohist/) | 1.12.2/1.16.5/1.18+ |
| [Arclight-Forge](https://github.com/IzzelAliz/Arclight) | - | 推荐高版本 | [FastMirror](https://www.fastmirror.net/#/download/Arclight) [McRes](https://mcres.cn/downloads/arclight.html) | 1.16.5+ |
| [Magma](https://magmafoundation.org/) | - | - | [McRes](https://mcres.cn/downloads/magma.html) | 没用过,不知道 |
| [Mohist](https://mohistmc.com/software/mohist) | 兼容paper的一些插件支持兼容 Mod 和插件;缺点:比较多插件不支持,部分 Mod 不支持; Mod 和插件在一起运行难免出现一些七七八八的 bug。 | 推荐高版本 | [McRes](https://mcres.cn/downloads/mohist.html) [FastMirror](https://www.fastmirror.net/#/download/Mohist) [原子云](https://res.nullatom.com/Minecraft/Server/Mohist/) | 1.12.2/1.16.5/1.18+ |
| [Arclight-Forge](https://github.com/IzzelAliz/Arclight) | - | 推荐高版本 | [FastMirror](https://www.fastmirror.net/#/download/Arclight) [McRes](https://mcres.cn/downloads/arclight.html) | 1.16.5+ |
| [Magma](https://magmafoundation.org/) | - | - | [McRes](https://mcres.cn/downloads/magma.html) | 没用过,不知道 |
| [Sponge](https://spongepowered.org/]Sponge) | 可加入sponge插件支持 Mod优化极强而且服务器兼容性更高对于线程优化能力更强负载更好。缺点即使你用了很多办法也很难让bukkit插件稳定运行sponge插件特别少启动速度特别慢。操作特别难与前面的完全不相同。 | 不推荐新手使用 | [McRes](https://mcres.cn/downloads/spongeforge.html) [FastMirror](https://www.fastmirror.net/#/download/SpongeForge) | 没用过,不知道 |
#### Fabric 混合端
| 名称 | 介绍 | 推荐与否 | 下载镜像 |
|----------------------------------------------------------|-----------------------------------------|------|--------------------------------------------------------------|
| [Banner](https://new.mohistmc.com/software/banner) | 并不是一款端,而是一个 Mod 需要安装在Fabric安装后重启即可加载插件 | - | [McRes](https://mcres.cn/downloads/banner.html) |
| 名称 | 介绍 | 推荐与否 | 下载镜像 |
|----------------------------------------------------------|-----------------------------------------|------|----------------------------------------------------------------------------------------------------------------|
| [Banner](https://new.mohistmc.com/software/banner) | 并不是一款端,而是一个 Mod 需要安装在Fabric安装后重启即可加载插件 | - | [McRes](https://mcres.cn/downloads/banner.html) |
| [Arclight-Fabric](https://github.com/IzzelAliz/Arclight) | 出现时间比banner晚目前不太稳定 | - | [FastMirror](https://www.fastmirror.net/#/download/Arclight) [McRes](https://mcres.cn/downloads/arclight.html) |
| [Cardboard](https://cardboardpowered.org/) | 支持的版本较多支持1.16.5-1.20.4 | - | [McRes](https://mcres.cn/downloads/carboard.html) |
| [Cardboard](https://cardboardpowered.org/) | 支持的版本较多支持1.16.5-1.20.4 | - | [McRes](https://mcres.cn/downloads/carboard.html) |
![](_images/那些服务端有后门吗.png)

View File

@ -27,29 +27,31 @@ MOD 服务端
:::
### 常见插件端(Paper 等)
| Minecraft 版本 | 最低版本 | 推荐版本 |
| -------------- | -------- | -------- |
| 1.0 - 1.11.2 | Java 6 | Java 8 |
| 1.12 - 1.16.4 | Java 8 | Java 11 |
| 1.16.5 | Java 8 | Java 16 |
| 1.17 | Java 16 | Java 17 |
| Minecraft 版本 | 最低版本 | 推荐版本 |
|-----------------|---------|---------|
| 1.0 - 1.11.2 | Java 6 | Java 8 |
| 1.12 - 1.16.4 | Java 8 | Java 11 |
| 1.16.5 | Java 8 | Java 16 |
| 1.17 | Java 16 | Java 17 |
| 1.17.1 - 1.20.4 | Java 17 | Java 21 |
| 1.20.5 - 1.21 | Java 21 | Java 21 |
| 1.20.5 - 1.21 | Java 21 | Java 21 |
### 混合服务端(CatServer 等)
TODO
## 直接下载
:::warning
此处下载链接可能不是最新版,如需下载最新版请跳转至 [手动下载](#%E6%89%8B%E5%8A%A8%E4%B8%8B%E8%BD%BD)
:::
| Java 版本 | 下载链接 |
| --------- | -------- |
| Java 6 | [Azul Zulu Builds of OpenJDK 64位 (JDK)](https://cdn.azul.com/zulu/bin/zulu6.22.0.3-jdk6.0.119-win_x64.msi) |
| Java 8 | [Azul Zulu Builds of OpenJDK 64位 (JRE)](https://cdn.azul.com/zulu/bin/zulu8.78.0.19-ca-jre8.0.412-win_x64.msi) |
| Java 11 | [Azul Zulu Builds of OpenJDK 64位 (JRE)](https://cdn.azul.com/zulu/bin/zulu11.72.19-ca-jre11.0.23-win_x64.msi) |
| Java 17 | [Azul Zulu Builds of OpenJDK 64位 (JRE)](https://cdn.azul.com/zulu/bin/zulu17.50.19-ca-jre17.0.11-win_x64.msi) |
| Java 21 | [Azul Zulu Builds of OpenJDK 64位 (JDK)](https://cdn.azul.com/zulu/bin/zulu21.34.19-ca-jdk21.0.3-win_x64.msi) |
| Java 版本 | 下载链接 |
|---------|----------------------------------------------------------------------------------------------------------------------------------------|
| Java 8 | [Dragonwell 8](https://dragonwell.oss-cn-shanghai.aliyuncs.com/8.19.20/Alibaba_Dragonwell_Extended_8.19.20_x64_windows.zip) |
| Java 11 | [Dragonwell 11](https://dragonwell.oss-cn-shanghai.aliyuncs.com/11.0.23.20.9/Alibaba_Dragonwell_Extended_11.0.23.20.9_x64_windows.zip) |
| Java 17 | [Azul Zulu](https://cdn.azul.com/zulu/bin/zulu22.32.15-ca-jdk22.0.2-win_x64.zip) |
| Java 21 | [GraalVM EE](https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_windows-x64_bin.zip) |
:::danger
@ -86,26 +88,7 @@ TODO
https://www.java.com/zh-CN/download/
</details>
### Zulu 版
根据各路大佬的测试 Zulu 相较 Oracle (你可以看做"公版") 更适合开 MC 服务器。
<details>
<summary>怎么找到官网并从官网下载</summary>
![](_images/Zulu-1.png)
往下翻,找到这个,选择你想要的版本:
![](_images/Zulu-2.png)
找到 64-bit (64位) 如果你的电脑是32位的建议不开服
![](_images/Zulu-3.png)
如果您不能安装此软件(如不兼容),请关闭此文档,且**不要向**文档编写者们提问,感谢。
</details>
如果你想进行 JVM 优化,请看[JVM优化](/docs-java/process/maintenance/optimize/jvm/jvm.md)
## 验证 Java 安装