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'ов |