Что именно должна изучить JVM

JVM
Что именно должна изучить JVM

Поиск общедоступного номера WeChat [Cicada Mufeng], добро пожаловать, обратите внимание и оставьте сообщение

В первый день изучения Java мы знали, что Java является кросс-платформенным языком, хотя в то время это могло быть невежеством, но функция «компилировать один раз, запускать везде» должна была оставить неизгладимое впечатление на многих Javaers.

Это означает, что после компиляции программы, разработанной на Java, ее можноWindowsбежать поLinuxиMacработать на мобильном телефоне, даже наX86ЦП иARMработать на ЦП.

Разные операционные системы, особенно процессоры с разной архитектурой, имеют разные базовые инструкции. Особенность Java «написать один раз, запустить везде» именно потому, что файлы байт-кода, скомпилированные Java, не запускаются напрямую на базовой платформе системы, а запускаются на виртуальной машине Java JVM, которая скрывает различия в базовой системе. среда выполнения создана для файлов байт-кода Java.

Что такое JVM?

Определение JVM

Давайте сначала посмотрим на определение JVM, официально данное Oracle.

The Java Virtual Machine is the cornerstone of the Java platform. It is the component of the technology responsible for its hardware- and operating system-independence, the small size of its compiled code, and its ability to protect users from malicious programs.

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

The Java Virtual Machine is an abstract computing machine. Like a real computing machine, it has an instruction set and manipulates various memory areas at run time. It is reasonably common to implement a programming language using a virtual machine

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

JDK & JRE & JVM

image-20220104160549940

Как видно из концептуальной карты Java, официально предоставленной Oracle, JVM находится в нижней части платформы Java, и все на платформе Java построено на основе JVM. JVM — это подмножество JRE, которое, в свою очередь, является подмножеством JDK.image-20220104170113409

Синтаксис Java, с которым мы обычно чаще всего сталкиваемся, представляет собой структуру верхнего уровня JDK.Если нас удовлетворяет только умелое использование различных API-интерфейсов Java, то нас можно рассматривать только как квалифицированных «упаковщиков».

В процессе разработки Java также могут возникнуть различные проблемы, понимание базовой структуры JVM может помочь нам решить проблему в принципе.

Что именно должна изучить JVM

Другими словами, с чего именно JVM должна начать обучение?

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

image-20220104164804570

1. Исходный код в байт-код

мы узнаем

  • Что произошло в процессе преобразования исходного кода в байткод
  • В чем загадка содержимого файла .class

2. Файл класса в виртуальную машину (механизм загрузки класса)

image-20220104165755727

мы узнаем

  • Как происходит процесс загрузки класса
  • Классификация загрузчиков классов

3. Область рабочих данных

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

image-20220104170126378

Среди них «область методов» и «куча» — это области данных времени выполнения, совместно используемые всеми потоками, которые создаются при запуске JVM и уничтожаются при выходе из JVM;

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

4. Сборка мусора JVM

Java-программистам не нужно вручную освобождать память благодаря механизму сборки мусора JVM, будем учиться

  • Как при сборке мусора определить, какие объекты можно очистить?
  • После определения мусора, каковы методы сбора мусора, и каковы преимущества и недостатки каждого из них?
  • Что такое переработка поколений JVM?
  • Что такое сборщики мусора JVM? Каковы преимущества и недостатки каждого из них? Как я могу проверить, какой сборщик в настоящее время используется JDK?

5. Параметры JVM

JVM имеет множество параметров конфигурации, таких как обнаружениеOutOfMemoryError, мы знаем, что места в куче недостаточно, а места в памяти, выделенного JVM, может не хватить для нормальной работы программы.В это время нам нужно настроить-XmxПараметры увеличивают объем памяти.

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

Другой пример: JVM выполняет инструкции байт-кода, интерпретируя и выполняя их.Обычно эффективность выполнения относительно низкая.Мы можем передать-serverПараметр включает JIT-компилятор C2 для своевременной оптимизации компиляции.

Я представлю общие параметры JVM иjps,jinfo,jstat,jstack,jmap,jconsole,jvisualvmИспользование других команд и инструментов.

6. Журнал GC

Наконец, мы будем использовать инструмент анализа файла журнала для анализа файлов журнала GC, включая

  • Журнал параллельного GC
  • Журналы CMS
  • Журнал G1