Почему размер MetaSpace в два раза больше, чем размер используемого MetaSpace?

Я написал программу для моделирования MetaSpace OOM. Но я обнаружил, что MetaSpace Size почти всегда вдвое больше, чем Used MetaSpace. Почему?

Я запускаю свою программу с флагом -XX:MaxMetaspaceSize=50m, программа бросает OOM, когда Used MetaSpace достигает 25M, а не 50M. Почему?

введите здесь описание изображения


person expoter    schedule 22.08.2016    source источник
comment
Возможный дубликат Как измерить фрагментацию в метапространстве Hotspot?   -  person the8472    schedule 23.08.2016


Ответы (2)


Я думаю, что следующие два эксперимента объяснят, что означает разрыв между размером метапространства и используемым метапространством:

EXP-1: загрузите один класс для каждого ClassLoader, я получил это: < img src="https://i.stack.imgur.com/pRlsK.png" alt="введите здесь описание изображения">

EXP-2: загрузить пять классов на ClassLoader, я получил это: < img src="https://i.stack.imgur.com/EVaVj.png" alt="введите здесь описание изображения">

Как документ Java 8 говорит:

Пространство запрашивается у ОС, а затем делится на куски. Загрузчик классов выделяет место для метаданных из своих фрагментов (чанк привязан к конкретному загрузчику классов).

Я думаю, это означает, что чанк обычно может содержать более одного класса, поэтому коэффициент использования MetaSpace Size растет по мере того, как вы загружаете больше классов на ClassLoader.

Вы можете повторно отобразить результаты, запустив здесь с помощью команды:

java -XX:MaxMetaspaceSize=50m MetadataOOMSimulator 100000000

Внимание: убедитесь, что все загружаемые классы не должны отображаться в CLASSPATH (обычно включают текущий каталог), иначе эти классы будут загружены с помощью APPClassLoader, а не настроенного ClassLoader.

person expoter    schedule 23.08.2016

Хороший вопрос ;-)

Взгляните на эту довольно хорошую статью.

PermGenSpace и MetaSpace

person Rainer    schedule 23.08.2016
comment
Если вы считаете, что ссылка отвечает на вопрос, вы должны обобщить свои выводы в своем ответе, а не публиковать ответ только по ссылке. - person assylias; 23.08.2016
comment
Да, вы правы, но я писал это на своем смартфоне в ожидании рейса... Печатать на нем ужасно. - person Rainer; 25.08.2016
comment
И вы также правы, что на самом деле это не отвечает на вопрос. Глупый я... Я прочитал эту статью год назад и был уверен, что она объясняет такое поведение. Но только отмечает это. - person Rainer; 25.08.2016