off-heap-usage-app

0

Описание

App demonstrates usage of Foreign Function & Memory API (FFM API) for managing offheap memory

Языки

  • Java100%
год назад
год назад
год назад
год назад
год назад
год назад
readme.md

Описание приложения

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). Для их использования необходимо включить флаг компилятора

--enable-preview
.

Например для

maven
:

Приложение включает

  1. Примеры использования FFM API:
  • SimpleFFMApiExample: Простой пример работы с FFM API на примере значений
    int
    .
  • ImageFFMApiExample: Преобразование цветного изображения в черно-белое с использованием FFM API.
  • TextFFMApiExample: Работа с текстом, запись и чтение текста в память с использованием FFM API.
  1. Описание анализа 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
:

  1. Выделяем сегменты памяти для хранения значений
    int
    .
  2. Записываем значения в сегменты памяти.
  3. Читаем значения из сегментов памяти и выводим их на экран.

2. ImageFFMApiExample

Описание: Этот пример демонстрирует преобразование цветного изображения в черно-белое с использованием FFM API:

  1. Загружаем изображение.
  2. Выделяем память для хранения всех байтов изображения.
  3. Записываем байты изображения в сегмент памяти.
  4. Преобразуем цветное изображение в черно-белое.

3. TextFFMApiExample

Описание: Этот пример демонстрирует работу с текстом, запись и чтение текста в память с использованием FFM API.

  1. Выделяем память для хранения текста.
  2. Записываем текст в сегмент памяти.
  3. Читаем текст из сегмента памяти и выводим его на экран.

Off-heap memory analysis

SimpleFFMApiExample

Выполнялось с помощью VisualVM (plugin VisualVM - MBeans)

Results

java.nio — это пакет, который предоставляет классы для работы с буферами и каналами ввода-вывода. Direct буферы выделяются вне heap памяти (off-heap). Используются для улучшения производительности при работе с большими объемами данных и для взаимодействия с нативными библиотеками.

До выделения памяти:

img_1.png

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

+ 16 bytes

img_2.png

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

img_3.png

ImageFFMApiExample

Выполнялось с помощью jcmd.

  • Запустить приложение с параметром JVM:

-XX:NativeMemoryTracking=summary

  • Выполнить на разных этапах работы приложения:

jcmd <pid> VM.native_memory summary

Results

До выделения памяти:

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

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