Подтвердить что ты не робот

Java куча внутри или вне памяти jvm?

До сегодняшнего дня я знал, что у java есть куча, и это создано JVM. Кроме того, эта память выделяется ОС на экземпляр JVM, т.е. Куча находится внутри экземпляра JVM.

Но сегодня я увидел картинку, enter image description here

который показывает, JVM и куча далеко друг от друга.

Итак, я запутался прямо сейчас. Может ли кто-нибудь сообщить мне, был ли я раньше или не понял эту картину?

4b9b3361

Ответ 1

Есть много вопросов по этому вопросу. Мне всегда нравятся статьи из IBM, так как они содержат очень хорошую информацию. Для этого конкретного вопроса, вот отрывок.

Из Нативная и Java-куча статей по IBM:

JVM поддерживает две области памяти, кучу Java ™ и собственный (или system) куча. Эти две кучи имеют разные цели и поддерживаемых различными механизмами.

Куча Java содержит экземпляры объектов Java и часто называемый "кучей". Это куча Java, поддерживаемая Сбор мусора, и это куча Java, которая изменена настройки кучи командной строки. Куча Java выделяется с помощью mmap или shmat, если запрашивается поддержка большой страницы. Максимальный размер Java куча предварительно распределена во время запуска JVM как одна непрерывная область, даже если настройка минимального размера кучи ниже. Это распределение позволяет ограничение размера искусственной кучи, заданное параметром минимального размера кучи для перейти к фактическому пределу размера кучи с расширением кучи.

Нативная или системная куча выделяется с использованием базового malloc и свободных механизмов операционной системы, и используется для базовая реализация конкретных объектов Java; например:

  • Объекты Motif, требуемые AWT и Swing
  • Буферы для процедур сжатия данных, которые представляют собой пространство памяти, которое библиотеки классов Java требуют для чтения или записи сжатых данных например .zip или .jar.
  • Распределение Malloc по приложению Код JNI
  • Скомпилированный код, сгенерированный компилятором Just In Time (JIT)
  • Темы для отображения в потоки Java

Надеюсь, это поможет вам понять.

Ответ 2

JVM в зеленом, скорее всего, не экземпляр JVM, а JVM-код, который находится в системной памяти, внутри Java-кучи есть экземпляры JVM, которые вы ожидали.

Если вы посмотрите на это изображение ниже, оно станет яснее, JVM будет зеленым на вашем изображении, будет внутри синей области операционной системы хоста

JVM

Ответ 3

Вы смешиваете две вещи. Первая - это память процесса. Да, куча является частью памяти процесса JVM. То, что обозначено как "JVM" на вашем снимке, является, скорее всего, программным кодом JVM. Имеет смысл, что он отделен от кучи. Фактически, почти все программы разделяли области кода/данных; я не уверен, но я думаю, что ОС частично отвечает за это.

Ответ 4

jvm - это просто приложение на ОС, поэтому оно будет работать на OS memroy.

ОС будет выделять память (native + heap + non-heap) для JVM.

jvm использует встроенную память и приложения, запущенные на JVM, используют кучу и не кучу.