интервьюер:Давайте сегодня поговорим о структуре памяти 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-интервью, серия онлайн-интервьюеров постоянно обновляется!
Серия [Онлайн-интервьюер-Мобильный терминал]Продолжаем обновлять два раза в неделю!
【Онлайн-интервьюер-компьютер】СерияПродолжаем обновлять два раза в неделю!
Оригинал это не просто! ! Проси три! !