2016-10-25 6 views
0

В Java 8 метапространство выделяется из встроенной памяти, но я ничего не нашел в сети, что такое встроенная память? За это link это память доступна для операционной системы, но при Difference between Metaspace and Native Memory in Java, родной памяти также показана как часть памяти данного в процессе JVMЯвляется ли metaspace выделенным из собственной памяти?

Пример: - Если да рассмотрим случай, когда я иметь 15 Гб оперативной памяти на Windows OS. У меня есть только один процесс (процесс Java), запущенный на машине с -Xmx 4GB.

Означает ли это, что ОС может использовать до (15-4)=11 GB, из которой будет выделено метапространство?

ответ

1

Есть метапас, выделенный из собственной памяти?

Да.

Definitive Источник: https://blogs.oracle.com/poonam/entry/about_g1_garbage_collector_permanent

Но я не получил где-нибудь на чистой, что является родной памяти?

Нативная куча - это куча malloc/free, которая обеспечивает динамическую память для тех частей JVM, которые реализованы в собственном коде (C++). Он также может использоваться пользовательскими встроенными библиотеками, загружаемыми JVM. Натуральная куча не сбор мусора per se, но metaspace есть.

Одним из преимуществ использования встроенной кучи для хранения объектов метаобъекта является то, что нативная куча не имеет фиксированного максимального размера (по умолчанию), такого как куча Java.

Если да, рассмотрим случай, когда у меня 15 ГБ оперативной памяти на ОС Windows. У меня есть только один процесс (процесс Java), запущенный на машине с -Xmx 4 ГБ. Означает ли это, что ОС может использовать до (15-4) = 11 ГБ, из которой будет выделена метапространственная память?

Может быть:

  • Там будет другой процесс на компьютере Windows. Многие из них. Просто они являются системными процессами.

  • Возможно, существуют ограничения, установленные операционной системой, на то, насколько велик процесс Java. (Я предполагаю, что в Windows есть что-то, что заполняет роль ulimit в системе UNIX/Linux.)

  • Если есть место на диске для подкачки, ОС может фактически распределить процесс Java больше памяти, чем доступно как страницы физической памяти.

+0

, когда я говорю «OS может использовать до (15-4) = 11 ГБ, из которого будет выделено метапространство памяти» i означает, что ОС может использовать до 11 ГБ по мере необходимости, как и для системного процесса (как вы сказали). Таким образом, мы можем сказать, что 11 ГБ или меньше можно классифицировать как родную память, из которой также будет выделен метапас. –

+0

Нет. Это только «собственная память», если ОС выделила ее для процесса Java. Если нет, его лучше назвать «свободной памятью» ... или «памятью, выделенной для какой-то другой цели». Кроме того, правильная терминология - это «родная куча», а не «родная память». –

+0

Вы, вероятно, должны прочитать следующее: https://en.wikipedia.org/wiki/Virtual_memory –

1

Собственная память - обычная память приложения. Это связано с памятью кучи, которой управляет JVM. Например, в программе на языке C он будет называться просто «памятью»

+0

«Родная память - это нормальная память приложения», я полагаю, что это означает, что в собственной памяти имеется оперативная память. Правильно ? –

+0

Собственная память @scottmiles может включать в себя доступную виртуальную память, которая может быть больше, чем оперативная память. –