mc启动java8_放弃使用 Java 8 来运行 Minecraft,拥抱 Java 11+

与游戏性能有关的改进新版本的 Java 引入了 ZGC 和 ShenandoahGC,并且默认 GC 改成了 G1。

对于一个中后期服务端来说,两个新 GC 有了更多手段来应付 MC 无处不在的内存泄漏,能尽量减少 Full GC 的发生。(具体性能测试待补)

2. 更好的 JIT

C2 被改进了,并且有了 Graal 的新选择。

3. 更好的世界生成(java.util.Random)性能

直接使用 JMH 进行测试,测试代码如下:

@State(Scope.Thread)

@BenchmarkMode(Mode.AverageTime)

@Warmup(iterations = 2)

@Measurement(iterations = 8, time = 5, timeUnit = TimeUnit.SECONDS)

@Threads(2)

@Fork(1)

@OutputTimeUnit(TimeUnit.NANOSECONDS)

public class RandomBenchmark {

ByteBuffer byteBuf = ByteBuffer.allocateDirect(8 * 1_000);

@Benchmark

public void benchmarkJavaRandom() {

byteBuf.clear();

Random random = new Random();

for (int i = 0; i < 1_000; i++) {

byteBuf.putLong(random.nextLong());

}

}

}

使用一个 direct byte buffer 的原因是直接使用 random.nextLong() 可能会被 JIT 优化掉,并且可以模拟随机数据的内存存放过程。

使用 i5-3380M + G1GC 进行跑分,

在 Oracle JDK 1.8.0_281 版本的测试中,最终结果如图。

在 AdoptOpenJDK HotSpot OpenJDK 11.0.10 版本的测试中,最终结果如图。

经过我们的对比,Java 11 相对于 Java 8 的 64 位随机数生成提升了 420% 的性能!

这甚至可以解释为什么旧版 MC 的世界生成如此之慢了。

应用前景

Minecraft 1.13+ 都可以直接使用 Java 9 以上的版本启动。我们也使用了一些内部实现让 Java 15 成功运行了 Minecraft 1.12.2(请不要私信或留言交流有关内容!可以自行探索)

这里批判一下 Forge,Forge 尽管可以用 Java 11 启动了,然而一直不推广和支持。而 Fabric 对于高版本 Java 的支持一直很到位。

我们希望通过 JVM 的性能提升以及(未来可能的)多线程优化,Minecraft 可以焕发第二春。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值