Что произойдет, если не удастся выделить память из-за критической фрагментации памяти в алгоритме CMS gc - PullRequest
0 голосов
/ 06 сентября 2018

Когда я устанавливаю алгоритм GC в качестве CMS, я знаю, что это может привести к фрагментации памяти.

Но я не смог найти никакой информации о том, что происходит в памяти, когда выделение не удалось из-за фрагментации памяти?

Это Стоп - мир надолго? или просто бросить OOME?

Я ценю тебя

1 Ответ

0 голосов
/ 06 сентября 2018

Алгоритм CMS использует свободные списки, чтобы записывать, где доступно пространство в куче. Как вы говорите, со временем старый ген. куча становится фрагментированной. Когда это достигнет точки, когда JVM сочтет это необходимым (то есть, становится все труднее находить место для объектов), она выполнит полную коллекцию компактов «останови мир». В этот момент вы можете испытать значительную паузу приложения. Длина паузы пропорциональна размеру старого поколения, а не количеству живых данных.

Вы получите исключение OOM, если сборщик не сможет восстановить достаточно места, чтобы справиться со скоростью продвижения объектов из молодого поколения.

Это также произойдет с G1, хотя, как правило, реже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...