
MCreatorMemFix
修复MCreator模组中一个大型内存分配错误。
MCreator 内存修复
修复了部分 MCreator 生成的 Forge 1.20.1 模组中的大内存分配错误。首次启动时检测模组,之后需要重启才能生效。对于使用 Forge 1.20.1 生成器 >=1.0(2025年10月28日)制作的模组,此模组不再必需。即使检测到这些模组,该模组也不应与之产生任何冲突,但不会对它们产生影响。
关于
TLDR(太长不看)
- 此模组修复了部分使用大量玩家附加变量的 MCreator 模组中的高分配率问题。
- 这可能减少 GC(垃圾回收)卡顿、降低平均/峰值内存使用,甚至带来小幅 FPS 提升。 效果因人而异,完全取决于你安装的 MCreator 模组。
- 安装此模组不应有任何负面影响。
- 此模组会在你启动游戏时检测所有适用的模组, 但需要再次启动游戏才会生效。
- 整合包作者应重新分发位于
.minecraft/config中的mcreator_mem_fix.json文件, 并可选择通过向配置文件中的 JSON 对象添加locked键并设置为 true 来锁定它。 这可以防止模组在模组列表更改时重新生成其配置。
前方有些技术内容。不会太难。
问题
每当 MCreator 模组访问其玩家变量时,它都会创建一个新对象作为默认值,然后访问存储的对象。 如果没有存储的对象,则使用默认对象。如果有存储的对象,则默认对象是无故创建的。
问题在哪里?许多 MCreator 模组喜欢频繁访问玩家变量。 这导致了大量不必要的分配。 这些分配可能在 tick 和帧中发生很多很多次, 导致每秒产生大量的分配。
解决方案
此模组仅阻止每次 MCreator 模组想要访问其玩家变量时都创建该对象。 它为每个模组存储一个默认变量对象,而不是每次访问时都创建新对象,我们会回退到存储的默认值。很简单。
安装此模组后不应有任何功能上的差异。
效果
一些 MCreator 模组在 GC 执行之前可以分配高达约 300MB 的垃圾。 内存分配是一个缓慢的操作,为无收益的操作分配那么多内存是不必要的。 使用此模组,MCreator 模组中与玩家变量相关的内存分配应降至几乎为零。 这可能减少卡顿、降低平均/峰值内存使用,甚至带来小幅 FPS 提升。效果因人而异。
我实际上没有做太多测试,但此模组不应导致太多问题。它几乎是免费的,几乎没有缺点。
兼容性
不确定。只要没有其他模组触及此模组触及的相同内容(显然,这通常是兼容性的工作方式),应该就没问题。
此模组有点侵入性,它修改了原模组的大量类,但应该以相对干净的方式进行。
任何不明确涉及 MCreator 模组的模组都应 100% 兼容,始终如此。除非我搞砸了什么。
常见问题解答
免责声明:从来没有人问过我以下任何一个问题。
我如何让它对特定的 MCreator 模组生效?
运行游戏后,会创建配置目录 .minecraft/config 中的一个文件。
创建此文件后,你应该重启游戏以确保检测到的 MCreator 模组被修改。
添加新的 MCreator 模组后,你应该删除此文件,以便模组重新扫描你的模组。
扫描 MCreator 模组时会记录日志消息。
整合包开发者可以安全地重新分发此配置文件,
从而避免最终用户需要重启游戏。
他们还可以通过添加并将 locked 键设置为 true 来锁定此文件。
这并非必需,但它可以阻止模组搜索新的候选模组进行修改,
在启动时节省几毫秒的时间。
出问题了。我该如何修复?
首先,尝试删除配置并重新运行游戏一两次。 如果这不起作用,请在此处提交问题。
你看起来真的很酷。你能做我的朋友吗?
不能。也许可以。
我可以在整合包中使用这个吗?
可以,它就是为此设计的。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。