Horizon плавнее Java Edition не потому, что Rust «магически быстрее», а потому, что в нём нет виртуальной машины Java: ни пауз сборщика мусора, ни прогрева кода во время игры. Добавьте к этому меньший расход памяти, работу с чанками в фоновых потоках и пакетную отрисовку — и получите меньше подлагиваний. При этом есть места, где Java пока быстрее, и о них тоже честно.
Что на самом деле измеряют
Средний FPS — плохая мера «плавности». Игра на 120 FPS с одним кадром в 200 мс каждые пару секунд ощущается хуже, чем ровные 60. Поэтому проект Horizon в своих замерах считает подлагивания: кадры дольше одного обновления экрана 60 Гц (вы видите одну картинку дважды) и долгие фризы — ниже 30 FPS. На ноутбуке 2016 года (дальность прорисовки 12) у Horizon 242 подлагивания в минуту против 470 у Java Edition, у Mac mini — ноль против 423, у игрового ПК — примерно на 70% меньше.
Пять причин, по-человечески
1. Нет сборщика мусора
Java сама освобождает ненужную память — периодически «останавливает мир» и убирает мусор. Minecraft создаёт много временных объектов, поэтому такие паузы заметны как одиночные подвисания. Rust освобождает память сразу, в момент, когда объект больше не нужен: пауз уборки просто нет.
2. Нет прогрева кода
Java-машина сначала интерпретирует код, а самые горячие участки компилирует в машинный код уже во время игры. Первые минуты в новом месте поэтому могут подтормаживать. Horizon скомпилирован под вашу систему заранее.
3. Меньше памяти
У каждого Java-объекта есть служебный заголовок, а сама JVM занимает место. В замерах на ноутбуке Horizon использовал 0,8 ГБ против 2,0 ГБ — Java нужно в 2,6 раза больше, что ощутимо на компьютере с 8 ГБ. Меньше памяти — меньше промахов кэша процессора.
4. Работа вне главного потока
В Horizon чанки генерируются, освещаются и превращаются в геометрию на рабочих потоках, а выгруженные чанки пишутся на диск в фоне. Главный поток меньше отвлекается — меньше скачков времени кадра.
5. Меньше вызовов отрисовки
Секции рельефа лежат в одном общем буфере и рисуются одним «множественным» вызовом на проход. Мобы и блок-сущности вне поля зрения пропускаются, пещеры, в которые не видно, отсекаются. Видеокарта меньше ждёт процессор.
Где Java пока быстрее
- Загрузка нового рельефа. На том же ноутбуке Java подгрузила новые чанки за 46,9 с, Horizon — за 59,7 с. Проект называет более ровные кадры на больших дальностях работой, которая ведётся сейчас.
- Средний тик сервера. В серверном бенчмарке (4-поточный i7-7500U, 1–50 ботов) у Paper средний тик был короче при любом числе игроков. Зато horizon-server занимал 0,7–1,1 ГБ памяти против 3,4–4,5 ГБ у Java-серверов, стартовал за 8–9 секунд и при 50 игроках держал 20 TPS, как и Paper.
Это хорошая иллюстрация: язык даёт инструменты, но конкретные алгоритмы и годы оптимизаций Paper тоже никуда не делись.
Почему это не маркетинг
Все цифры выше — из открытых замеров проекта с описанной методикой (одинаковый мир, маршрут, настройки, медианы нескольких прогонов) и с разделом «где Java Edition всё ещё быстрее». Проверить их на своём компьютере можно встроенным бенчмарком — как, рассказываем в статье «Как поднять FPS в Horizon». А сравнение с популярными модами-оптимизаторами — в «Horizon против Sodium, Iris и OptiFine».
Почему тогда не переписать всё
Переписать игру с нуля — огромная работа, и главная трудность не в языке, а в том, чтобы совпасть с оригиналом до мелочей: генерация мира, редстоун, поведение мобов. Horizon решает это автоматическими тестами против настоящей 26.3 — подробнее в статье о дифференциальных харнессах.
Что это значит для вас
Если Java Edition у вас «вроде бы 100+ FPS, но дёргается» — Horizon, скорее всего, ощутимо поможет. Если вы летаете на элитрах по новым землям — разница будет меньше, а загрузка чанков может быть даже медленнее. Попробовать недолго: установка занимает 10 минут, а миры открываются те же. Начать знакомство можно со статьи «Что такое Horizon».
Источники
- Performance — What Horizon does differently — на английском
- Benchmarks — на английском
- Серверный бенчмарк: horizon-server, vanilla, Paper, Fabric