Это 11-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов
Любой, у кого опыт разработки более трех лет, напишет это предложение в своем резюме, разбирается/знаком с JVM (структурой памяти) и имеет определенное представление о механизме сборки мусора.
Но часто большинство людей не знают, о чем просят, или они не полностью готовы, или просто выдумывают.
В следующей статье пойдет речь о знании JVM, JMM, алгоритме сборки мусора, сборщике мусора и способах его настройки.
Первый шаг Великого похода.
Сегодня мы взглянем на структуру памяти JVM, хотя это и концептуальные знания, но теоретические знания в сочетании с ежедневной работой по разработке, накопленные с течением времени, имеют большое влияние на обычное программирование.
Я здесь JDK8 в качестве примера, описывающего структуру памяти JVM, если вы хотите узнать более всесторонние знания, на самом деле, купив эту книгу, вы увидите больший эффект, «углубленное понимание виртуальной машины Java».
Я нарисовал картинку, посмотрите сначала!
В целом его можно разделить на два типа: приватный поток и общий поток.
приватный поток
Регистр счетчика программ
Индикатор номера строки байт-кода, выполняемой потоком, выбирает следующую инструкцию байт-кода для выполнения путем изменения значения счетчика и учитывает только методы Java.
Поскольку каждый поток имеет свой независимый номер строки, а так как память, занимаемая счетчиком программ, невелика, имеет смысл для каждого потока использовать независимый счетчик для обработки, что не вызовет никакого давления, а потому, что каждый поток имеет частный счетчик и намного быстрее.
Вот почему процедурные технологи являются потоко-частными.
Стек виртуальных машин (Stack) (функция: последний вошел первым)
Модель памяти для выполнения методов Java содержит множество кадров стека.
Кадр стека является основной структурой данных во время работы метода.Каждый фрейм стека в основном содержит локальные переменные, стеки операндов, динамические соединения, адреса возврата и т.д.
Кадр стека метода, выполняемого в потоке, сохраняется в стеке виртуальной машины, и кадр стека будет уничтожен только при выполнении метода.
Вот еще один важный и часто задаваемый вопрос: как вызвать исключения StackOverflowError и OutOfMemoryError и почему?
Мы объясним этот вопрос в следующей статье, и вы также можете изучить его самостоятельно.
собственный стек методов
Функции стека собственных методов аналогичны функциям стека виртуальной машины: стек виртуальной машины обслуживает методы Java, а стек собственных методов обслуживает собственные методы.
обмен потоками
Метапространство
Используется для хранения загруженной информации о классе, констант, статических переменных и т. д. данных.
До JDK1.8 эти данные хранились в области методов, которую мы часто называем постоянной генерацией (PermGen).
отличается от постоянного поколенияПамять виртуальной машины Java, метапространство используется напрямуюлокальная памятьместо хранения.
Замена метапространства имеет множество преимуществ, например:
-
Когда пул строковых констант хранится в постоянном поколении, он подвержен переполнению памяти и проблемам с производительностью.
-
Размер информации о классе трудно определить, поскольку постоянное поколение использует память виртуальной машины Java, поэтому указать память постоянного поколения будет сложно.
-
Как упоминалось в книге «Углубленное понимание виртуальной машины Java», другие виртуальные машины (такие как: JRockit, IBM J9) и т. д. не имеют постоянного поколения. Это также показывает, что виртуальная машина Java (HotSpot) не может быть интегрирована с другими виртуальными машинами, при использовании метапространства эта проблема решается.
куча
Куча Java — это область памяти, совместно используемая всеми потоками, и самый большой участок памяти, которым управляет виртуальная машина Java.
В нем хранятся почти все экземпляры объектов, и механизм сборки мусора, о котором мы поговорим позже, тоже для кучи, потому что куча — это основная область, управляемая сборщиком мусора.
С точки зрения сборщика мусора кучу также можно разделить на новое поколение (Eden, From Survivor, To Survivor) и старое поколение.
Об этом я подробно расскажу в статье о сборке мусора в будущем, а вы также можете проверить книги самостоятельно.