Часто задаваемые вопросы на собеседовании - пожалуйста, расскажите о структуре памяти JVM!

JVM

Это 11-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов

Любой, у кого опыт разработки более трех лет, напишет это предложение в своем резюме, разбирается/знаком с JVM (структурой памяти) и имеет определенное представление о механизме сборки мусора.

Но часто большинство людей не знают, о чем просят, или они не полностью готовы, или просто выдумывают.

В следующей статье пойдет речь о знании JVM, JMM, алгоритме сборки мусора, сборщике мусора и способах его настройки.

Первый шаг Великого похода.

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

Я здесь JDK8 в качестве примера, описывающего структуру памяти JVM, если вы хотите узнать более всесторонние знания, на самом деле, купив эту книгу, вы увидите больший эффект, «углубленное понимание виртуальной машины Java».

Я нарисовал картинку, посмотрите сначала!

1.png

В целом его можно разделить на два типа: приватный поток и общий поток.

приватный поток

Регистр счетчика программ

Индикатор номера строки байт-кода, выполняемой потоком, выбирает следующую инструкцию байт-кода для выполнения путем изменения значения счетчика и учитывает только методы Java.

Поскольку каждый поток имеет свой независимый номер строки, а так как память, занимаемая счетчиком программ, невелика, имеет смысл для каждого потока использовать независимый счетчик для обработки, что не вызовет никакого давления, а потому, что каждый поток имеет частный счетчик и намного быстрее.

Вот почему процедурные технологи являются потоко-частными.

Стек виртуальных машин (Stack) (функция: последний вошел первым)

Модель памяти для выполнения методов Java содержит множество кадров стека.

Кадр стека является основной структурой данных во время работы метода.Каждый фрейм стека в основном содержит локальные переменные, стеки операндов, динамические соединения, адреса возврата и т.д.

Кадр стека метода, выполняемого в потоке, сохраняется в стеке виртуальной машины, и кадр стека будет уничтожен только при выполнении метода.

Вот еще один важный и часто задаваемый вопрос: как вызвать исключения StackOverflowError и OutOfMemoryError и почему?

Мы объясним этот вопрос в следующей статье, и вы также можете изучить его самостоятельно.

собственный стек методов

Функции стека собственных методов аналогичны функциям стека виртуальной машины: стек виртуальной машины обслуживает методы Java, а стек собственных методов обслуживает собственные методы.

обмен потоками

Метапространство

Используется для хранения загруженной информации о классе, констант, статических переменных и т. д. данных.

До JDK1.8 эти данные хранились в области методов, которую мы часто называем постоянной генерацией (PermGen).

отличается от постоянного поколенияПамять виртуальной машины Java, метапространство используется напрямуюлокальная памятьместо хранения.

Замена метапространства имеет множество преимуществ, например:

  1. Когда пул строковых констант хранится в постоянном поколении, он подвержен переполнению памяти и проблемам с производительностью.

  2. Размер информации о классе трудно определить, поскольку постоянное поколение использует память виртуальной машины Java, поэтому указать память постоянного поколения будет сложно.

  3. Как упоминалось в книге «Углубленное понимание виртуальной машины Java», другие виртуальные машины (такие как: JRockit, IBM J9) и т. д. не имеют постоянного поколения. Это также показывает, что виртуальная машина Java (HotSpot) не может быть интегрирована с другими виртуальными машинами, при использовании метапространства эта проблема решается.

куча

Куча Java — это область памяти, совместно используемая всеми потоками, и самый большой участок памяти, которым управляет виртуальная машина Java.

В нем хранятся почти все экземпляры объектов, и механизм сборки мусора, о котором мы поговорим позже, тоже для кучи, потому что куча — это основная область, управляемая сборщиком мусора.

С точки зрения сборщика мусора кучу также можно разделить на новое поколение (Eden, From Survivor, To Survivor) и старое поколение.

Об этом я подробно расскажу в статье о сборке мусора в будущем, а вы также можете проверить книги самостоятельно.