跳到正文

Yet Another Memory Optimization (YAMO)

作者:juds

不要在内存中加载 JAR 文件,并延迟加载 DFU

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

又一个内存优化 (YAMO)

YAMO 是一次进一步优化内存使用的尝试。它
有两个主要功能,可以在(大型)整合包中大幅削减内存占用。所采用的
方法有些取巧,因此不保证在所有环境下都能奏效。

要完整体验 YAMO 能释放多少内存,你应该用你的整合包创建一个新
世界,在创造模式下四处飞行一会儿,等待一分钟,然后
关闭并重启游戏(原因见下文)。

内存中的 JAR 文件

模组以 JAR 文件的形式分发。NeoForge(以及 Forge)中的
JAR 加载机制会通过将整个文件保留在内存中来加载某些内部 JAR 资源。大多数模组
不使用这种内部 JAR 机制,但有些会使用。在大型整合包中,这可能
累计达到数百 MB。

YAMO 的解决方案是将内存中的 JAR 存储到磁盘上的 ‘cache/mods’
子目录中。应当能检测到原始 JAR 的更改,并正确地更新缓存目录。
删除缓存目录也没问题,因为它会在下次运行时重建。

对 JAR 加载的进一步改进在于底层 ZIP 结构的内存索引。
JAR 可能会从不同位置被多次加载(可能取决于 JDK)。当检测到这种情况时,
ZIP 索引会被去重(对于较大的模组,例如 MineColonies,这可能达到几 MB)。

尝试仅在需要时加载 DFU (DataFixerUpper)

DFU 负责将旧游戏版本的 NBT 即时升级到
当前版本。当你加载一个旧世界,其中的区块(包括方块和实体)需要更新时,
这是必需的。它是一个复杂的基于规则的过程,需要 100Mb+ 的 RAM 来高效存储规则,
以便更新本身足够快。它在加载速度方面也已大幅改进,因此惰性加载的需求
较小。为了节省内存,本模组仍然尝试仅在需要时才加载它。

由于大多数包含结构的模组都带有旧版本的 NBT 数据,
结果就是当你的整合包中有一些这类模组时,DFU 很快就会被需要。当 YAMO
检测到旧的 NBT 结构时,它会动态加载 DFU,然后尝试将所有更新后的 NBT 结构数据
写入 ‘cache/structures’ 子目录。这个过程可能需要长达一分钟,且
大部分在后台进行。结果是你的整合包中的所有结构现在都以最新的 NBT 版本
可用,下次运行时就不再需要 DFU 了。

常见问题

Yet Another Memory Optimization (YAMO) 支持哪些 Minecraft 版本?

Yet Another Memory Optimization (YAMO) 支持 Minecraft Java 版 1.21.1,可用的加载器:NeoForge。下载时注意选择和你游戏版本一致的文件。

Yet Another Memory Optimization (YAMO) 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

juds 的其他作品

查看全部 →