
Dimension Leak Fix
修复切换维度时的内存泄漏问题。像Collective、AmbientSounds和Create这类模组会在RAM中保留旧世界,本模组会自动清理它们,每次切换可回收2-4GB内存。
每次你在主世界、下界和末地之间传送时,你的客户端都会创建一个新的ClientWorld。旧世界应该被垃圾回收,但几个流行的模组意外地持有对它的引用——导致它永远留在内存中。
仅仅几次维度切换后,这就能消耗 4-8 GB 的内存,导致卡顿、掉帧,最终崩溃。
维度泄漏修复 自动检测维度转换,并精准地切断这些保留链,每次转换可回收 2-4 GB 的内存。
它修复了什么
| 来源 | 问题 | 影响 |
|---|---|---|
| 实体引用 | 旧世界中的实体持有一个指向它的.level字段 |
每次转换约 200 MB |
| Collective | BlockEntityData.cachedBlockEntities 通过嵌套的 WeakHashMaps 保留了旧世界 |
每次转换约 1.2 GB |
| AmbientSounds | AirPocketScanner 线程将数千个 ChunkSections 作为 GC 根持有 | 每次转换约 1.4 GB |
| Create | 渲染器缓存持有对旧世界数据的引用 | 不定 |
| 区块存储 | 旧世界的 ChunkManager 保留了所有已加载的区块在内存中 | 每次转换约 1-3 GB |
工作原理
该模组采用两阶段方法:
- 阶段 A(即时):当你改变维度时,模组立即解除实体引用,刷新 Collective 缓存,停止 AmbientSounds 扫描线程,解除 Spark 命令发送者,并使 Create 的渲染器失效。
- 阶段 B(3 秒后):模组清除旧世界的区块存储数组和实体集合。这是延迟的,以避免在转换期间干扰渲染器。
兼容性
- 仅客户端——不需要在服务器上安装
- 无论是否安装了上述任何模组都能工作——模组检测已安装的内容并仅应用相关修复
- 已使用 200+ 模组测试,包括 Iris、Sodium、Distant Horizons、Create、Collective、AmbientSounds
日志输出
模组记录它所做的所有事情。维度改变后的示例输出:
[DimensionLeakFix] 检测到维度改变,正在清理旧世界...
[DimensionLeakFix] 实体:已解除 131 个世界引用
[DimensionLeakFix] Collective:已刷新 cachedBlockEntities 中的 1 个缓存
[DimensionLeakFix] AmbientSounds:扫描器已停止(已清除 3 个字段)
[DimensionLeakFix] Create:渲染器缓存已失效
[DimensionLeakFix] 阶段 A 完成(137 次操作)
[DimensionLeakFix] 阶段 B 已计划(延迟 3 秒)
[DimensionLeakFix] 阶段 B:正在释放旧世界数据...
[DimensionLeakFix] 区块:已释放 2809 个槽位
[DimensionLeakFix] loadedChunks:已清除 2809 个条目
[DimensionLeakFix] 阶段 B 完成(已释放 2810 个引用,释放约 3706 MB)
用于 Legends Reborn: Medieval 整合包中。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。