Почему размер MetaSpace в два раза больше, чем у MetaSpace?
2 ответа
Я думаю, что следующие два эксперимента объяснят, что означает разрыв между MetaSpace Size и Used MetaSpace:
EXP-1: загрузить один класс на ClassLoader, я получил это:
EXP-2: загрузить пять классов на ClassLoader, я получил это:
Как сказано в документе Java 8:
Пространство запрашивается у ОС и затем разделяется на куски. Загрузчик классов выделяет пространство для метаданных из своих чанков (чанк привязан к определенному загрузчику классов).
Я думаю, это означает, что чанк может содержать более одного класса, поэтому коэффициент использования MetaSpace Size увеличивается по мере загрузки большего количества классов на ClassLoader.
Вы можете снова увидеть результаты, запустив здесь код с помощью команды:
java -XX:MaxMetaspaceSize=50m MetadataOOMSimulator 100000000
Внимание: убедитесь, что все загружаемые классы не отображаются в CLASSPATH
(обычно включает в себя текущий каталог), или эти классы будут загружены APPClassLoader, а не настроенным ClassLoader.