
MemGuard
通过缓存NBT字符串、监控内存使用情况并在最佳时机触发垃圾收集,减少大型整合包和服务器中的内存占用。
MemGuard
为长时间运行的 Minecraft 会话提供精简的内存行为。
MemGuard 是一个轻量级实用模组,适用于 Fabric / Forge / NeoForge(Minecraft 1.21.1),专注于减少可避免的内存分配,并使内存压力更易于观察。
MemGuard 的功能
1. 复用重复的短 NBT 字符串
- 钩子:
NbtString.of(...) - 通过 LRU 缓存(最多 2048 条)复用重复的短值。
- 减少较大模组包中常见 ID/标签产生的重复对象分配。
2. 记录定期堆快照
- 从服务器 tick 上下文中采样堆使用情况。
- 当超过配置的使用阈值时输出警告日志。
- 旨在提供可见性和故障排查帮助,并非直接宣称性能提升。
3. 跟踪纹理图集生命周期(客户端)
- 在图集上传完成后,MemGuard 会在调试上下文中记录堆已使用值。
- 帮助将加载阶段与内存行为关联起来。
技术说明
- 使用 Mixin 钩子实现针对性行为(
NbtCacheMixin、ServerChunkManagerMixin/ChunkCacheMixin、TextureCacheMixin)。 - 无原生代码,无不安全内存访问。
- 不会使用
System.gc()强制垃圾回收。
重要精度说明
- MemGuard 不保证固定的 FPS/MSPT/MB 提升。
- 实际影响取决于模组包大小、实体/世界状态、JVM 厂商/参数以及会话时长。
- 在具有重复 NBT 模式的中大型模组包中,预期收益通常更高。
可复现的评估(推荐)
要为您的环境评估 MemGuard,请在完全相同条件下对比基线与 MemGuard:
- 相同的 Java 版本、JVM 参数、模组列表、世界种子和配置。
- 相同的运行时长(建议每次运行 30-60 分钟)。
- 至少 3 次基线运行 + 3 次 MemGuard 运行。
- 收集可比较的指标:
- p50/p95 MSPT(通过
spark或类似工具) - 来自日志的堆使用趋势
- 分配/GC 事件数据(JFR 或类似工具)
- 比较分布(中位数/p95),而非单个峰值。
安装
Fabric
- 安装 Fabric Loader(
0.16+) - 安装 Fabric API
- 将 MemGuard jar 放入
mods/文件夹
Forge / NeoForge
- 为您的 Minecraft 版本安装匹配的加载器
- 将 MemGuard jar 放入
mods/文件夹
兼容性
- 设计为可与常见优化模组共存。
- 与任何基于 Mixin 的模组一样,在正式部署前请先在您的确切模组包环境中进行测试。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。