27 lines
4.5 KiB
Markdown
27 lines
4.5 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
- нативные сборки
|
|||
|
tags:
|
|||
|
- maturity/🌱
|
|||
|
date: 2023-11-15
|
|||
|
zero-link:
|
|||
|
- "[[../../meta/zero/00 Java разработка|00 Java разработка]]"
|
|||
|
parents:
|
|||
|
linked:
|
|||
|
---
|
|||
|
Нативные сборки в контексте Java относятся к процессу компиляции Java-приложений в нативный машинный код, специфичный для конкретной операционной системы и архитектуры процессора. Это отличается от традиционного подхода Java, где приложения компилируются в байт-код и выполняются на Java Virtual Machine ([JVM](JVM.md)). Основным инструментом для создания нативных сборок в Java является GraalVM Native Image.
|
|||
|
|
|||
|
**Плюсы:**
|
|||
|
1. **Быстрый Старт и Низкое Расходование Ресурсов**: Нативные сборки могут значительно ускорить время запуска приложения и уменьшить потребление ресурсов (например, памяти), поскольку они не требуют запуска JVM и загрузки классов ([Class Loader Subsystem](Class%20Loader%20Subsystem.md)) во время выполнения.
|
|||
|
2. **Уменьшение Зависимости от JVM**: Нативные приложения уменьшают зависимость от конкретной версии JVM, что может быть полезно в контекстах с ограниченными ресурсами или в случаях, когда требуется минимизировать размер сборки.
|
|||
|
3. **Лучшая Интеграция с Системой**: Нативные приложения могут лучше интегрироваться с операционной системой и использовать системные библиотеки.
|
|||
|
4. **Безопасность и Изоляция**: Нативные сборки могут предложить улучшенную безопасность и изоляцию, так как они меньше зависят от внешних факторов, таких как настройки JVM.
|
|||
|
|
|||
|
**Минусы:**
|
|||
|
1. **Ухудшение Производительности**: Несмотря на ускорение запуска, нативные сборки могут иметь более низкую производительность выполнения по сравнению с JVM, особенно для долго работающих приложений, где JVM оптимизирует выполнение кода во время работы ([[JIT Compilation]]).
|
|||
|
2. **Сложность Сборки**: Процесс создания нативной сборки может быть сложнее и требует дополнительных настроек по сравнению с традиционной Java-сборкой.
|
|||
|
3. **Ограниченная Совместимость**: Не все библиотеки и фреймворки Java совместимы с нативной компиляцией, и некоторые могут требовать специальной адаптации или полностью не поддерживаться. Чаще всего проблема в генерации классов во время выполнения программы. Например, [такого очень много в SpringBoot.](Создание%20прокси-объектов%20в%20SpringBoot.md)
|
|||
|
4. **Отсутствие Кросс-Платформенности**: Одним из ключевых преимуществ Java является ее кросс-платформенность, которая теряется при переходе к нативным сборкам, так как они специфичны для каждой платформы.
|
|||
|
## Дополнительные заметки по теме
|
|||
|
- [Сборка Quarkus приложения в исполняемый файл](quarkus/Сборка%20Quarkus%20приложения%20в%20исполняемый%20файл.md)
|
|||
|
- [Исследование сборки исполняемых файлов](Исследование%20сборки%20исполняемых%20файлов.md)
|