
Create: Railway Evolution
Smart traffic control and collision avoidance for Create trains. No more signals needed.
Список изменений
🚂 Railway Evolution v1.0.8 — [CORE PERFORMANCE & MEMORY OVERHAUL]
This update delivers critical performance optimizations and garbage-collection improvements, targeting high-frequency tick loops across core registries and controllers. / Это обновление приносит критические оптимизации производительности и снижение нагрузки на сборщик мусора (GC), затрагивая высокочастотные тиковые циклы в ключевых реестрах и контроллерах.
To be completely transparent with the community: profiling heavy networks revealed hidden allocation bottlenecks during high-frequency checks. Version 1.0.8 aggressively eliminates transient object spamming and redundant string operations per tick. / Буду честен с сообществом: профилирование тяжелых сетей выявило скрытые узкие места выделения памяти во время частых проверок. Версия 1.0.8 агрессивно убирает мусор из временных объектов и избыточные операции со строками за каждый тик.
Version 1.0.8 eliminates per-tick array allocations, caches immutable identifiers, and optimizes collection sorting, making Railway Evolution faster and lighter on server resources. / Версия 1.0.8 полностью убирает выделение массивов за каждый тик, кэширует неизменяемые идентификаторы и оптимизирует сортировку коллекций, делая Railway Evolution быстрее и легче для серверных ресурсов.
✨ Key Features & Improvements / Ключевые изменения и улучшения:
-
Zero-Allocation Coordinate Lookups / Нулевые аллокации координат:
TrainAIController.java:getNodeXZ()/getNodeXYZ()no longer allocate newdouble[]arrays every tick, relying instead on an internal reusable buffer_nodeCoordBuf. /TrainAIController.java:getNodeXZ()/getNodeXYZ(): Устранена аллокация массивовnew double[]каждый тик — теперь используется внутренний переиспользуемый буфер_nodeCoordBuf. -
Identifier Caching & CPU Saving / Кэширование идентификаторов: Precomputed
final String shortIdinside the constructor, removing over 70 costlytrainId.toString().substring(0, 8)calls per tick. / ПредрассчитываетсяshortId: Полеfinal String shortIdпредрассчитывается один раз в конструкторе, убраны 70+ вызововtrainId.toString().substring(0, 8)за тик. -
Lambda-Free Registry Sorting / Сортировка без лямбд в реестрах:
StoppedTrainRegistry.javaandMovingTrainRegistry.java: Distance sorting ingetNearby()has been migrated to a staticDistanceComparatorinstance, eliminating anonymous lambda allocations. /StoppedTrainRegistry.javaиMovingTrainRegistry.java: Сортировка по дистанции вgetNearby()переведена на статический экземплярDistanceComparator(устранены анонимные лямбды при сортировке). -
Optimized Segment Keys / Оптимизированные ключи сегментов:
VirtualBlockSystem.java: String concatenation inmakeSegmentKey()replaced with a lightweightrecord SegmentKey(int dimHash, long posA, long posB)utilizing packed coordinates viaBlockPos.asLong(). /VirtualBlockSystem.java: Конкатенация строк вmakeSegmentKey()заменена на компактныйrecord SegmentKey(int dimHash, long posA, long posB)с упаковкой координат черезBlockPos.asLong(). -
Reusable Safety Evaluations / Переиспользуемые структуры безопасности:
SafetyManager.java: Eliminatednew SafetyResult(...)allocations during safety evaluations by utilizing areusable.set(...)pattern. /SafetyManager.java: Устранены аллокацииnew SafetyResult(...)при оценке безопасности — используется переиспользуемыйreusable.set(...). -
API & State Machine Refinements / Доработки состояний и API:
TrainStateId.java&TrainActuator.java: AddedSTOPPEDto theTrainStateIdenum and standardized theITrainHandleinterface implementation inTrainActuator. /TrainStateId.javaиTrainActuator.java: ДобавленSTOPPEDв enumTrainStateId. Приведена к стандарту имплементация интерфейсаITrainHandleвTrainActuator.
🔮 What's Next / Что дальше:
With these low-level performance bottlenecks crushed, tick times are tighter than ever, ensuring smoother sessions for massive automated networks. Thank you for your continued support and bug reports! / Благодаря устранению этих низкоуровневых узких мест производительности, время тиков стало стабильнее, обеспечивая плавную работу масштабных автоматизированных сетей. Спасибо за вашу поддержку и багрепорты! 🚀
