OutOfMemoryError: Java heap space — что значит и сколько памяти давать
ОшибкиОшибка выглядит так:
java.lang.OutOfMemoryError: Java heap space
Она означает ровно одно: игре или серверу не хватило той памяти, которую вы ей разрешили занять. Не той, что есть в компьютере, а той, что указана в параметре -Xmx.
Где задаётся лимит
У сервера — в скрипте запуска: java -Xms2G -Xmx4G -jar server.jar nogui. Здесь -Xmx4G и есть потолок. У клиента — в настройках профиля лаунчера, в поле аргументов JVM.
-Xms — сколько занять сразу, -Xmx — максимум. Для сервера их часто ставят равными, чтобы память не перераспределялась на ходу.
Сколько давать
| Что запускаем | Разумный -Xmx |
|---|---|
| Ванильный клиент | 2 ГБ |
| Клиент со сборкой 100–200 модов | 4–6 ГБ |
| Ванильный сервер, 5–10 игроков | 2 ГБ |
| Сервер с плагинами, 20–40 игроков | 4 ГБ |
| Модовый сервер, большая сборка | 6–8 ГБ |
Почему «больше» — не всегда «лучше»
Распространённое заблуждение: выделить всё, что есть. Так делать не стоит по двум причинам.
Первая: системе и самой Java нужна память сверх кучи. Указав -Xmx8G на машине с 8 ГБ, вы гарантируете либо отказ запуска (Could not reserve enough space for object heap), либо уход в файл подкачки, после которого игра начнёт заикаться.
Вторая: чем больше куча, тем дольше её убирает сборщик мусора. Вместо редких вылетов получаются регулярные фризы на секунду-две. Симптом узнаваемый: «памяти вагон, а лагает».
Если памяти объективно мало
Прежде чем покупать тариф подороже, попробуйте уменьшить расход.
- FerriteCore — убирает дублирование одинаковых данных в памяти. На больших сборках экономит от трети до половины. Единственное, что даёт такой эффект без побочных.
- Дальность прорисовки — на сервере параметр
view-distanceвserver.properties. Снижение с 10 до 6 уменьшает расход заметно, а игроки разницу почти не замечают. - Предгенерация мира — генерация новых чанков самая тяжёлая операция. Прогнав её заранее, вы снимаете всплески.
Когда дело не в настройках
Если память кончается на ровном месте и быстро — ищите утечку в конкретном моде или плагине. Признак: расход растёт со временем даже без игроков, а перезапуск всё чинит на несколько часов. Здесь помогает деление пополам, как при поиске сломанного мода.
И честное: на тарифе с 1 ГБ модовый сервер не поедет никакими настройками. Если сборка большая, вопрос решается только памятью.
Хостинги сравнены по цене за гигабайт памяти — в рейтинге хостингов.Частые вопросы
Сколько памяти выделять серверу?
Ванильному на 5–10 игроков хватает 2 ГБ, сборке на 100+ модов нужно 6–8. Выделять больше двух третей физической памяти машины нельзя: системе тоже нужно место.
Поможет ли выделить 16 ГБ вместо 8?
Часто наоборот. Чем больше куча, тем дольше сборка мусора, и вместо вылетов вы получите секундные фризы. Лишняя память не ускоряет игру.