Перейти к содержанию

Java Platform: JDK, JRE, JVM, GC

  • Средства разработки. JDK и JRE. Компиляция и выполнение программы. JAR-архивы

Java: Платформа

Написано однажды — работает везде

JDK / JRE / JVM

JDK (Java Development Kit)
 └── JRE (Java Runtime Environment)
      └── JVM (Java Virtual Machine)
           └── ClassLoader + Интерпретатор байт-кода
Компонент Что делает
JDK Инструменты разработчика: компилятор javac, библиотеки, утилиты
JRE Минимум для запуска Java-приложений: JVM + ClassLoader + стандартные библиотеки
JVM Исполняет байт-код; реализация — HotSpot
Байт-код Набор инструкций, скомпилированный javac, исполняемый JVM

JIT (Just-in-time compilation)

Компиляция байт-кода в машинный код во время выполнения — повышает производительность. HotSpots — часто исполняемые участки кода, которые JIT компилирует и кэширует в code cache.

Преимущества Java

  • Кроссплатформенность (JVM)
  • Автоматическое управление памятью (GC)
  • Многопоточность
  • Безопасность (нет указателей, Security Manager / «песочница»)
  • ООП, богатое сообщество

Недостатки Java

  • Платное коммерческое использование (с 2019)
  • Ниже производительность, чем у C/C++
  • Многословный код
  • Слабые инструменты GUI

ClassLoader

При запуске JVM задействуются три загрузчика классов:

Загрузчик Что загружает
Bootstrap ClassLoader Платформенные классы JDK из rt.jar
Extension ClassLoader Классы расширений из jre/lib/ext
AppClassLoader Классы приложения из CLASSPATH

Три шага работы ClassLoader: 1. Загрузка — поиск и импорт двоичных данных 2. Связывание — проверка, подготовка, разрешение ссылок 3. Инициализация — выполнение кода инициализации переменных

Динамическая загрузка: Class.forName("ИмяКласса") — загружает класс «на лету» в runtime.

Сборщик мусора (Garbage Collector)

Две задачи GC: поиск мусора + очистка мусора.

Трассировка (Tracing) — метод поиска в HotSpot. Всё, что недостижимо из GC Roots — мусор.

GC Roots: - Объекты в статических полях - Объекты в стеке потоков - JNI-ссылки в native-методах

Виды сборки

Вид Описание
Minor GC Частый и быстрый; работает с Young Generation (Eden → Survivor)
Major GC Редкий; работает со Old Generation; включает уплотнение памяти
Full GC Сначала Minor, затем Major

Реализации GC

GC Особенность
Serial Простейший, однопоточный
Parallel Параллельный, автоподстройка производительности
CMS Снижение задержек, параллельная маркировка
G1 Современный, заменяет CMS, для больших heap'ов