1a2s3d4f1
本帖最后由 1a2s3d4f1 于 2023-1-21 14:17 编辑

DataFixerUpper是负责把旧存档数据升级到新版本,比如用1.19,想读取1.17的存档,可以用“优化世界”功能升级,但是,DataFixerUpper初始化性能开销大,分配大量短命对象消耗内存(gc频率高),使用大量cpu资源导致卡顿(DFU初始化速度没这么快,玩家进存档了都还没完成初始化
CPU占用:


找到高占用线程(本机cpu为二核四线程):


查看堆栈,是DFU的


DFU线程大量消耗cpu资源,导致渲染线程不能充分利用cpu,表现为显卡占用低,帧率低,在这种情况下,可以安禁止DFU的mod,比如DataFixerSlayerLazyDFU

杂项:JIT编译器预热(楼主不是专业的,下面的内容可能有错误)
刚刚进入存档(提示:虽然OpenJ9的JIT编译器预热速度快,但性能比Hotspot弱,在低配可能出现5mspt性能差距甚至更高,所以j9建议给客户端程序,比如HMCL用,利用AOT编译器提高打开速度):
这里用了GraalVM(OpenJ9也会露出JIT编译器线程),所以可以在VisualVM界面看到JIT编译器线程占用情况


挂机一段时间后:
(FPS:10 ->15) MSPT(19->10)MSPT越高,世界运算越卡


对于低配置设备,可以在世界挂几分钟预热(基岩版没有预热阶段,毕竟C++写的,编译阶段就优化好了),java还要在运行时进行优化


总结:在1.19,禁用DFU的mod对低配玩家变得更重要,java版的性能不是刚开始就最佳,低配玩家可以等一下来达到流畅体验。不