Как разделяется пул памяти java?
в настоящее время я отслеживаю приложение Java с помощью jconsole. Вкладка память позволяет выбирать между:
Heap Memory Usage
Non-Heap Memory Usage
Memory Pool “Eden Space”
Memory Pool “Survivor Space”
Memory Pool “Tenured Gen”
Memory Pool “Code Cache”
Memory Pool “Perm Gen”
в чем разница между ними ?
4 ответов:
кучу
память "кучи" - это область выполнения данных от виртуальной машины Java выделяет память для всех экземпляров классов и массивов. Куча может быть фиксированного или переменного размера. Сборщик мусора-это автоматическая система управления памятью, восстанавливает память "кучи" для объектов.
Иден Пробел: пул, из которого первоначально выделяется память для большинства объектов.
Survivor Space: Пул, содержащий объекты, которые пережили сбор мусора пространства Эдема.
Хранилище или Старый Ген: пул, содержащий объекты, которые существовали в течение некоторого времени в пространстве survivor.
память без кучи
память без кучи включает область метода, разделяемую между всеми потоками и памятью, необходимой для внутренней обработки или оптимизации для виртуальной машины Java. Он хранит структуры для каждого класса, такие как пул констант времени выполнения, данные полей и методов, а также код для методов и конструкторов. Область метода логически является частью кучи, но, в зависимости от реализации, виртуальная машина Java не может собирать мусор или сжимать его. Как в динамической памяти, область метода может иметь фиксированный или переменный размер. Память для области метода не должна быть непрерывной.
Постоянный: бассейн, содержащий все отражающие данные самой виртуальной машины, такие как объекты класса и метода. С виртуальными машинами Java, которые используют совместное использование данных класса, это поколение разделено на области только для чтения и чтения-записи.
Code Cache: горячая точка Java VM также включает в себя кэш кода, содержащий память, которая используется для компиляции и хранения собственного кода.
новое ключевое слово выделяет память в куче Java. Куча-это основной пул памяти, доступный для всего приложения. Если для выделения этого объекта недостаточно памяти, JVM пытается восстановить некоторую память из кучи с помощью сборки мусора. Если он все еще не может получить достаточно памяти, OutOfMemoryError выбрасывается, и JVM выходит.
куча разделена на несколько различных разделов, называемых поколениями. Как объекты выживают больше мусорные коллекции, они продвигаются в разные поколения. Старшие поколения не так часто собирают мусор. Поскольку эти объекты уже доказали, что они живут дольше, они с меньшей вероятностью будут собирать мусор.
когда объекты впервые построены, они выделяются в пространстве Эдема. Если они выживают после сбора мусора, их продвигают в пространство выживших, и если они живут там достаточно долго, они выделяются для занятого поколения. Этот генерация мусора собирается гораздо реже.
существует также четвертое поколение, называемое постоянным поколением, или PermGen. Объекты, которые находятся здесь, не могут быть собраны в мусор и обычно содержат неизменяемое состояние, необходимое для запуска JVM, например определения классов и пул строковых констант. Обратите внимание, что пространство PermGen планируется удалить из Java 8 и будет заменено новым пространством под названием Metaspace, которое будет проходить в native память. Ссылка:http://www.programcreek.com/2013/04/jvm-run-time-data-areas/
с Java8, не область кучи больше не содержит PermGen, но Метапространство, которое является основным изменением в Java8, предполагается избавиться от ошибок памяти с java, поскольку размер метапространства может быть увеличен в зависимости от пространства, требуемого jvm для данных класса.
Память Кучи Java является частью памяти, выделенной для JVM операционной системой.
объекты находятся в области, называемой кучей. Куча создается при запуске JVM и может увеличиваться или уменьшаться в размере во время работы приложения. Когда куча становится полной, мусор собирается.
вы можете найти более подробную информацию о Иден пространство, пространство оставшегося в живых, хранилища и постоянной генерации in ниже SE вопрос:
молодое, выдержанное и Пермское поколение
PermGen был заменен на Metaspace с момента выпуска Java 8.
относительно ваших запросов:
- Иден пространство, пространство оставшегося в живых, хранилища являются частью кучи
- Метапространство и Кэш кода являются частью памяти без кучи.
Codecache: виртуальная машина Java (JVM) генерирует собственный код и сохраняет его в области памяти, называемой кодовым кэшем. JVM генерирует собственный код по различным причинам, в том числе для динамически генерируемого цикла интерпретатора, заглушек Java Native Interface (JNI) и для методов Java, которые компилируются в собственный код компилятором JIT. JIT на сегодняшний день является самым большим пользователем codecache.



Comments