Ответ 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
Надеюсь, это поможет вам понять.