
Jasione
Jasione - оптимизационный мод для Майнкрафт, который снижает нагрузку на сборщик мусора (GC) за счет устранения клонирования массивов enum-значений. Меньше лагов, плавнее FPS.
Jasione
Что это и зачем нужно
Jasione - это небольшой, но очень полезный оптимизационный мод для Майнкрафт, который решает одну конкретную проблему производительности: снижает нагрузку на сборщик мусора (GC).
В Java каждый enum-класс генерирует метод values(), который возвращает массив всех значений. Проблема в том, что этот массив каждый раз клонируется перед возвратом - чтобы один вызывающий код мог безопасно менять массив, не влияя на других. В горячих участках кода (hot paths) эти мелкие аллокации памяти накапливаются и создают лишнюю работу для GC. В Майнкрафте, где enum'ы используются повсеместно (например, Direction, BlockState), это может приводить к микро-лагам и просадкам FPS.
Jasione решает эту проблему хитро: он анализирует байткод и определяет, какие вызовы values() не мутируют возвращаемый массив. Для таких вызовов он подставляет кешированную версию массива, полностью устраняя клонирование и аллокацию памяти. Безопасность гарантируется анализом на уровне байткода - если мод видит, что массив может быть изменен или "убегает" за пределы метода, он оставляет оригинальный вызов как есть.
Настройка
Конфиг лежит в config/jasione.toml. По умолчанию мод включен и работает "из коробки". Есть пара отладочных опций:
# Включает/выключает мод
enabled = true
[debug]
# Логирует статистику при оптимизации
printOptimization = false
# Сохраняет трансформированные классы в папку ".jasione.out"
dumpClasses = false
Если хочешь посмотреть, сколько enum-вызовов было оптимизировано - включи printOptimization. Для обычной игры это не нужно.
Важно знать
Почему JIT-компилятор сам это не оптимизирует?
Хороший вопрос. По тестам JMH, даже самые тривиальные паттерны использования (например, обычный цикл по массиву) не распознаются JIT'ом. Клонирование и аллокация остаются. Jasione делает то, что JIT не умеет.
NeoForge ругается на мод. Это нормально?
Да. На NeoForge 1.21.11+ может появиться предупреждение:
[Render thread/ERROR] [ne.ne.fm.cl.tr.ClassTransformStatistics/]: Class processor jasione:main transformed 100.00% of loaded class which is suspiciously high; it may be attempting mass-ASM.
Это не ошибка. NeoForge просто проверяет, не пытается ли мод делать массовые ASM-трансформации без необходимости. Для Jasione это необходимо - он должен анализировать все enum-классы. Разработчики NeoForge в курсе, обсуждение было на их Discord-сервере.
Как это работает (технически)
Контракт Enum#values гласит: возвращаемый массив свежий и его можно свободно мутировать. Поэтому Jasione должен быть уверен, что оптимизация безопасна. Он использует библиотеку asm-analysis для анализа байткода каждого вызывающего метода.
Если анализ показывает, что массив не мутируется и не "убегает" за пределы метода - вызов перенаправляется на кеш. Сам кеш хранится в специально сгенерированном классе-держателе для каждого enum'а. Например, для net.minecraft.core.Direction генерируется класс me.decce.jasione.cached.net.minecraft.core.Direction, который хранит статическое финальное поле с кешированным массивом.
Итог
Jasione - это must-have для тех, кто хочет выжать максимум производительности из Майнкрафта, особенно на слабых машинах или серверах с большим онлайном. Мод не меняет геймплей, не добавляет контент - он просто делает игру плавнее за счет оптимизации того, что обычно остается за кадром.
Скачайте Jasione и забудьте о микро-лагах от сборщика мусора.
Как поиграть с друзьями с модом Jasione?
Мод Jasione куда интереснее в компании: поднимите сервер Майнкрафт с уже установленным модом, позовите друзей и играйте по своим правилам. Хостинг Майнкрафт для мода Jasione будет готов за пару минут - BungeeHost сделает всё за вас.
