介绍
📖 模组介绍
Ice and Fire 会为游戏中的每一个生物实体(包括动物、怪物和村民)附加一个“状态数据包”,用于追踪冰冻、锁链、海妖魅惑等效果。问题在于,绝大多数实体根本不会用到这些功能,却仍然携带着完整的数据包,而且游戏每个刻都要查询一次。
结果就是:内存开销高,还会造成不必要的性能损耗。
这个模组的作用很直接:减少不必要的内存占用,并缩短查询路径。
简而言之:内存占用减少约 20%,性能提升约 7%。
⚙️ 工作原理
1. 缓存查询结果——不再绕远路
实体第一次需要查询状态数据时,仍会照常查询。之后,查询结果会直接存储在实体自身上。下次查询时,即可直接命中,无需再经过全局注册表。
2. 按需创建——不再预先分配
原本,每个实体都会立即分配 4 个对象(锁链、魅惑、腐烂鸡蛋、杂项),不管它们以后是否会用到。优化后,只有真正需要时才会创建对象。普通动物、怪物和村民将不再分配这些不必要的对象。
3. 读取只读,写入才写入
只读路径使用共享的空对象,不会生成新数据。只有实际修改状态的路径才会创建专用数据。
4. 状态为空时释放,只保存有用数据
状态恢复为空时,对应对象会立即释放。NBT 只保存有意义的数据。完全兼容旧存档,可以放心升级。
📊 优化效果
测试方法:使用 Spark heapsummary,在相同整合包和种子下探索 5 分钟。
| 指标 | 未优化 | 优化后 | 改善幅度 |
|---|---|---|---|
| Ice and Fire 相关内存 | 382 KB | 272 KB | -28.7% |
| 状态数据包内部内存 | 169 KB | 72 KB | -57.0% |
| 每个实体的状态数据开销 | ~220 B | ~96 B | -56.1% |
| 4 种延迟创建的子对象总数 | 3,080 | 17 | -99.45% |
| JVM 已用堆内存 | 4.13 GiB | 3.57 GiB | ~ -478 MiB |
🕹️ 6 小时游戏对比
使用相同的整合包、渲染距离和实体距离。TPS 稳定在 20。交替进行探索和基地活动。
| 指标 | 未优化 | 优化后 | 差异 |
|---|---|---|---|
| 每刻查询次数 | 数亿次全局查询 | 直接读取本地缓存 | 大多数查询已消除 |
| JVM 已用堆内存 | ~6.2 GiB | ~4.9 GiB | ~ -1.3 GiB |
常见问题
Ice and Fire Memory Fix 支持哪些 Minecraft 版本?
Ice and Fire Memory Fix 支持 Minecraft Java 版 1.19.2–1.20.1,共 2 个版本,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。
Ice and Fire Memory Fix 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。
TheFlareStar 的其他作品
查看全部 →Optimization of Campfire Smoke
优化原版营火的烟雾粒子效果
Citadel Fix
这个模组修复了 Citadel 启动时拉取赞助商名单导致的卡顿,并优化了启动速度。
Toms Storage Star Optimized
Tom的存储的轻量优化模组。
Shipwreck Fix
这个模组修复了1.19.2/1.20.1中沉船群组(MC-249136)的漏洞,避免其长时间卡顿。

评论
登录后评论和评分