off-heap-usage-app
Описание
App demonstrates usage of Foreign Function & Memory API (FFM API) for managing offheap memory
Языки
- Java100%
Описание приложения
Description
Это приложение демонстрирует использование Foreign Function & Memory API (FFM API) в Java для работы с памятью Offheap на низком уровне. А также включает демонстрацию состояния памяти, в части использования off-heap памяти с помощью инструмента jcmd.
Off-heap память используется для хранения данных, которые требуют более контролируемого управления
памятью. Примеры использования off-heap памяти включают работу с большими объемами данных,
низкоуровневое взаимодействие с нативными библиотеками или необходимость минимизации нагрузки
на сборщик мусора.
What we need
Java
Для запуска этого приложения используется Java 21
Дополнительные параметры
Это приложение использует функции Java (FFM API), которые находятся в стадии предварительного просмотра (preview).
Для их использования необходимо включить флаг компилятора .
Например для :
Приложение включает
- Примеры использования FFM API:
- SimpleFFMApiExample: Простой пример работы с FFM API на примере значений
.int - ImageFFMApiExample: Преобразование цветного изображения в черно-белое с использованием FFM API.
- TextFFMApiExample: Работа с текстом, запись и чтение текста в память с использованием FFM API.
- Описание анализа off-heap памяти
- SimpleFFMApiExample: с использованием VisualVM
- ImageFFMApiExample: с использованием jcmd
What's going on?
Foreign Function & Memory API (FFM API) — это API в Java, который предоставляет возможности для работы с памятью на низком уровне. FFM API позволяет выделять и управлять памятью, а также взаимодействовать с нативными библиотеками. Основные компоненты FFM API включают:
- Arena: Управляет выделением и освобождением памяти.
- MemorySegment: Представляет непрерывный блок памяти.
- ValueLayout: Определяет макет значений в памяти (например,
,JAVA_INT).JAVA_BYTE
FFM API позволяет более гибко управлять памятью и взаимодействовать с нативными библиотеками, что может быть полезно для высокопроизводительных приложений и приложений, требующих низкоуровневого управления памятью.
FFM API Examples
1. SimpleFFMApiExample
Описание:
Этот пример демонстрирует использование FFM API для работы с значениями :
- Выделяем сегменты памяти для хранения значений
.int - Записываем значения в сегменты памяти.
- Читаем значения из сегментов памяти и выводим их на экран.
2. ImageFFMApiExample
Описание: Этот пример демонстрирует преобразование цветного изображения в черно-белое с использованием FFM API:
- Загружаем изображение.
- Выделяем память для хранения всех байтов изображения.
- Записываем байты изображения в сегмент памяти.
- Преобразуем цветное изображение в черно-белое.
3. TextFFMApiExample
Описание: Этот пример демонстрирует работу с текстом, запись и чтение текста в память с использованием FFM API.
- Выделяем память для хранения текста.
- Записываем текст в сегмент памяти.
- Читаем текст из сегмента памяти и выводим его на экран.
Off-heap memory analysis
SimpleFFMApiExample
Выполнялось с помощью VisualVM (plugin VisualVM - MBeans)
Results
java.nio — это пакет, который предоставляет классы для работы с буферами и каналами ввода-вывода. Direct буферы выделяются вне heap памяти (off-heap). Используются для улучшения производительности при работе с большими объемами данных и для взаимодействия с нативными библиотеками.
До выделения памяти:

После выделения памяти:
+ 16 bytes

После выхода из Arena:

ImageFFMApiExample
Выполнялось с помощью jcmd.
- Запустить приложение с параметром JVM:
- Выполнить на разных этапах работы приложения:
Results
До выделения памяти:
После выделения памяти:
После выхода их Arena: