冰火传说内存修复
📖 模组介绍
冰火传说 会给游戏里的每一个生物(包括动物、怪物、村民)都挂上一份“状态数据包”,用来记录冰冻、锁链、海妖魅惑等效果。但问题是——绝大多数生物根本用不到这些功能,却依然背着完整的数据包,而且游戏每 tick 都要去翻找一遍。
导致的结果就是:内存占用虚高,无谓的性能开销。
这个模组做的就是:把不必要的内存占用砍掉,把查询路径缩短。
省流: 总内存占用降低约 20%,综合性能提升约 7%。
⚙️ 优化原理
1. 缓存查询结果,不走弯路
每个生物第一次需要状态数据时正常查询,之后直接把结果存到生物自己身上。下次再查,一步到位,不再绕路去全局注册表翻找。
2. 用到了才创建,不提前占坑
原版不管生物用不用,一上来就创建 4 个对象(锁链、魅惑、烂鸡蛋、杂项)。优化后只有真正用到时才创建,普通动物/怪物/村民永远不会分配这些多余对象。
3. 读归读,写归写
只是查看状态时用共享空对象,不会产生新数据。只有真正要改变状态时才创建专属数据。
4. 状态空了就释放,存档只存有用的
状态解除后立刻释放对应对象,NBT 也只保存有意义的数据。兼容旧存档,升级无忧。
📊 优化效果
测试方式:Spark heapsummary,相同整合包、相同种子,跑图 5 分钟。
| 指标 | 未优化 | 优化后 | 提升 |
|---|---|---|---|
| 冰火传说 相关内存 | 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 小时对比
测试方式:Spark heapsummary,相同整合包、视距、实体距离,TPS 稳定 20,跑图 + 基地活动交替。
| 指标 | 未优化 | 优化后 | 差异 |
|---|---|---|---|
| 每 tick 查询次数 | 数亿次全局查找 | 本地缓存直接读 | 绝大部分查询被消除 |
| JVM 已用堆 | ~6.2 GiB | ~4.9 GiB | 减少约 1.3 GiB |
支持版本
Forge: 1.20.1 / 1.19.2
下载方式
CurseForge: https://www.curseforge.com/minecraft/mc-mods/ice-and-fire-memory-fix/