Интервьюер спросил меня о структуре памяти JVM, и я действительно был

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

интервьюер:Давайте сегодня поговорим о структуре памяти JVM?

Кандидат: Хорошо, хорошо

Кандидат: Это также упоминалось в предыдущих интервью: файл класса будет загружен в JVM загрузчиком классов, а JVM будет отвечать за «управление памятью» программы «время выполнения»

Кандидат: Структура памяти JVM часто относится к «области данных времени выполнения», определенной JVM.

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

Кандидат: Следует отметить, что это концепция разделов JVM «нормативная».При реализации конкретной реализации реализация разных производителей может отличаться.

интервьюер:Ну, кстати, расскажи мне содержание каждой области на твоей карте.

Кандидат: Хорошо, начну со счетчика программ.

Кандидат: Java - многопоточный язык. Мы знаем, что если количество потоков больше, чем количество ЦП, существует возможность "переключения потоков". Переключение означает "прерывание" и "восстановление". Естественно, существует область для сохранения "текущей" информации о выполнении потока"

Кандидат: Итак, счетчик программ — это адрес, используемый для записи байт-кода, выполняемого каждым потоком (ветвь, цикл, переход, исключение, восстановление потока и т. д. — все зависит от счетчика)

интервьюер: Хорошо, я понял.

Кандидат: Тогда позвольте мне поговорить о «стеке виртуальных машин».

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

Кандидат: Разобравшись в составе «стека виртуальной машины», нетрудно догадаться о его функции: он сохраняет локальные переменные метода, вычисление некоторых переменных, участвует в вызове и возврате метода.

интервьюер: хорошо понял

Кандидат: Давайте поговорим о «локальном стеке методов».

Кандидат: функции стека собственных методов аналогичны функциям стека виртуальной машины.Стек виртуальной машины используется для управления вызовом функций Java, а стек собственных методов используется для управления вызовом собственных методов. «Родной метод» здесь относится к «методу, отличному от Java». Как правило, собственный метод реализован на языке C.

интервьюер:В порядке…

Кандидат: Ну, после разговора о "локальном стеке методов", "стеке виртуальной машины" и "счетчике программ", о, ниже есть "область методов" и "куча"

Кандидат: Тогда позвольте мне сначала поговорить о «области методов».

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

Кандидат: Таким образом, «область методов» — это только часть спецификации JVM.

Кандидат: В виртуальной машине HotSpot часто упоминается слово "постоянная генерация". Виртуальная машина HotSpot использует «постоянную генерацию» для реализации «области методов» до JDK8, в то время как многие виртуальные машины других производителей не имеют концепции «постоянной генерации».

Кандидат: мы будем использовать виртуальную машину HotSpot, чтобы проиллюстрировать следующий контент.

Кандидат: В JDK8 «метапространство» использовалось для замены «постоянной генерации» в качестве реализации «области методов».

интервьюер:В порядке…

Кандидат: область методов в основном используется для хранения «информации, связанной с классом», которая была загружена виртуальной машиной: включая информацию о классе, постоянный пул

Кандидат: информация о классе также включает такую ​​информацию, как версия, поля, методы, интерфейсы и родительские классы класса.

Кандидат: постоянный пул можно разделить на «статический постоянный пул» и «постоянный пул времени выполнения».

Кандидат: Статический пул констант в основном хранит такую ​​информацию, как "литеральное значение" и "символическая ссылка". Статический пул констант также включает то, что мы называем "пулом строковых констант".

Кандидат: «Константный пул времени выполнения» хранит такую ​​информацию, как «прямые ссылки», сгенерированные во время «загрузки класса».

интервьюер:В порядке…

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

Кандидат: Но поскольку «JDK7», «пул констант времени выполнения» и «пул статических констант» были перенесены в «кучу» памяти для хранения (для «физического раздела», «пула констант времени выполнения» и «статического пула констант» «Пул констант» относится к куче)

интервьюер: Ну, это слишком информативно

интервьюер:Я хотел бы спросить, вы сказали, что поскольку «JDK8» изменил реализацию «области методов» с «постоянной генерации» на «метапространство», в чем разница?

Кандидат: Основное отличие состоит в том, что "метапространство" не хранится в виртуальной машине, а использует локальную память. У JVM больше не будет переполнения памяти в области методов. В прошлом "постоянная генерация" часто заканчивалась OOM исключения из-за нехватки памяти.

Кандидат: Согласно версии JDK8, это фактически эквивалентно: «информация о классе» хранится в «мета-пространстве» (некоторые люди называют «информацию о классе» «константным пулом информации о классе», главным образом потому, что имя отличается, а значение другое). на месте нормально)

Кандидат: «Постоянный пул» начался с JDK7, и он находится в «куче» с точки зрения «физического хранилища», которое не изменилось.

интервьюер: ну я понял

интервьюер:Наконец, давайте поговорим об области «кучи».

Кандидат: Ну, «куча» — это область, разделяемая потоками, и почти вся память, выделенная для экземпляров классов и массивов, поступает из нее.

Кандидат: «Куча» делится на «Новое поколение» и «Старое поколение», «Новое поколение» далее делится на области Эдема и Выжившего, и, наконец, Выживший состоит из «От выжившего» и «До выжившего».

Кандидат: Не много ББ, дай мне тоже порисовать

Кандидат: делит "память кучи" на несколько областей, в основном связанных с "восстановлением памяти" (механизм сборки мусора)

интервьюер: Сборка мусора подождет до следующего раза.Там много чего происходит.

интервьюер:Хотите поговорить о разнице между структурой памяти JVM и моделью памяти Java?

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

Кандидат: Модель памяти Java связана с «параллелизмом». Это спецификация, предложенная для защиты основных деталей. Есть надежда, что верхний уровень (уровень Java) будет иметь одинаковый эффект на разных платформах при работе с памятью.

Кандидат: структура памяти Java (также известная как область данных времени выполнения), которая описывает, какова «логическая структура» каждого раздела, когда наш файл класса загружается в виртуальную машину, и какую роль играет каждый раздел.

интервьюер:понял

Итог дня: Состав структуры памяти JVM (структура памяти JVM также называется «областью данных времени выполнения». Она в основном состоит из пяти частей: стека виртуальной машины, собственного стека методов, счетчика программ, области методов и кучи. Область методов и куча совместно используются потоками. . Стек виртуальной машины, собственный стек методов и счетчик программ изолированы от потоков)

Добро пожаловать в мой публичный аккаунт WeChat【Java3y] Давайте поговорим о Java-интервью, серия онлайн-интервьюеров постоянно обновляется!

Серия [Онлайн-интервьюер-Мобильный терминал]Продолжаем обновлять два раза в неделю!

【Онлайн-интервьюер-компьютер】СерияПродолжаем обновлять два раза в неделю!

Оригинал это не просто! ! Проси три! !