createopt

createopt

此模块在不影响玩家游戏体验的前提下,优化服务器上“创建”模块的内存使用。

CreateOpt v2.0 - 服务端纯优化模块
核心概念:不删除或限制任何游戏内容。通过使用缓存、对象复用和空间索引等技术,让相同的计算运行得更快。
### 1. TickOptimizer - 方块实体刻度缓存
问题:在 Minecraft 中,每个游戏刻(50毫秒)都需要对所有方块实体进行刻度计算。机械动力整合包包含大量动力设备(齿轮、传送带、搅拌器等),每个都在持续进行刻度计算,但许多设备的状态实际上并未改变(如静止的齿轮、空载的传送带)。
优化:缓存每个方块实体的状态哈希(位置 + 类型 + 游戏时间窗口)。如果状态保持不变,则跳过冗余计算。每20个游戏刻重新评估一次,确保不会遗漏状态变化。
效果:将方块实体刻度计算工作量减少30-50%。这一效果在机械动力整合包中最为显著。
### 2. EntitySpatialIndex — 实体空间分区索引
问题:当 Minecraft 在某个区域内搜索实体时(用于碰撞检测、物品掉落搜索、实体交互),默认方式是遍历所有实体并逐一检查其 AABB 包围盒。对于拥有上千实体的120模组服务器,每次搜索都需要遍历所有实体。
优化:将实体存储在 16×16 方块的网格中。查询时,仅搜索目标区域覆盖的网格,而不是进行全局遍历。例如,查找 3×3 区域内的实体,只需搜索9个网格,而非全部实体。
效果:实体搜索从 O(n) 降为 O(k)(k 为附近网格中的实体数量),碰撞检测速度提升5-10倍。
### 3. ObjectPool - 临时对象池
问题:在 Minecraft 中,每个游戏刻会创建大量临时 ArrayList(实体列表、方块列表、渲染列表等),使用后即弃,并触发垃圾回收(GC)。在8GB内存服务器上,频繁的GC可能导致卡顿(stop-the-world 暂停)。
优化:维护一个 ArrayList 对象池。当需要临时列表时,从池中借用(已清空),使用后归还池中以便复用,避免反复创建和销毁对象。
效果:临时对象分配减少60-80%,显著降低GC频率和持续时间。
### 4. RecipeCache - 配方缓存
问题:每次玩家或自动化设备在 Minecraft 中合成物品时,游戏必须遍历所有注册的配方(整合模组包可能有上千种配方),逐一检查输入是否匹配。相同输入每次都需要重新搜索。
优化:优化"输入物品哈希 → 配方结果"的映射。首次查找后,对于后续相同输入,直接返回缓存结果,实现 O(1) 查找。缓存大小为2048条,采用 LRU(最近最少使用)淘汰策略。
效果:合成查询从 O(n) 降为 O(1),对于大量自动合成的机械动力服务器提升效果显著。
### 5. TPSMonitor - TPS与内存监控
功能:每5秒输出一次服务器状态:
- TPS:每秒游戏刻数(理想值为20;低于15表示服务器卡顿)
- 游戏刻持续时间:每游戏刻的平均时长(理想值为 < 50毫秒)
- 内存使用:已使用/最大内存及百分比
每60秒输出各优化模块的统计数据:
- 游戏刻缓存命中率
- 对象池命中率(复用 vs 新建)
- 配方缓存命中率
- 空间索引中的实体数量
用途:管理员可通过日志了解服务器运行状态和优化效果,纯监控不干预。

配置文件

配置项