Перейти к содержимому

Java 21: Foreign Function & Memory API | Project Panama с практическими примерами

LearningFromExperience

0:00 / 0:00

Java 21: Foreign Function & Memory API | Project Panama с практическими примерами

105 просмотров · 2 месяца назад
LearningFromExperience
4,24 тыс. подписчиков
105 просмотров · 2 месяца назад
Изучите API внешних функций и памяти Java 21 на примере трех практических демонстраций из проекта Panama: вызов функции strlen() на языке C, передача Java-коллбэка в функцию qsort() и управление нативной памятью вне кучи. API внешних функций и памяти, обычно называемый FFM API, позволяет Java-приложениям взаимодействовать с нативными функциями и памятью с помощью java.lang.foreign — без написания кода JNI, традиционно необходимого для нативной интеграции. В этом руководстве вы узнаете: • Почему Java нужен API внешних функций и памяти (Foreign Function & Memory API) • Что такое Project Panama • Как API внешних функций и памяти соотносится с традиционной интеграцией на основе JNI • Роли компоновщика (Linker), дескриптора функции (FunctionDescriptor) и обработчика метода (MethodHandle) • Как Arena, MemorySegment и MemoryLayout управляют нативной памятью • Как нативные функции C находят и вызывают нативные функции из Java • Как вызовы снизу вверх (upcalls) позволяют нативному коду вызывать Java • Как безопасно выделять, читать и освобождать внекучевую память • Когда API внешних функций и памяти подходит для реальных приложений Практические демонстрации: 1. Вызов функции strlen() из Java напрямую 2. Передача обратного вызова компаратора Java в функцию qsort() из C 3. Выделение и управление внекучевой нативной памятью с помощью Arena и MemorySegment Временные метки 00:00 — Что такое API внешних функций и памяти (Foreign Function & Memory API)? 00:40 — Проблема с JNI и API ByteBuffer 01:29 — Обзор проекта Panama 02:13 — API FFM: две части (внешняя функция + внешняя память) 03:23 — Продвижение курса: подробный анализ возможностей Java 21 03:38 — 6 основных компонентов API FFM 05:51 — Сторона вызова: компоновщик, поиск символов, дескриптор функции, дескриптор метода 05:51 — Сторона памяти: арена, сегмент памяти, макет памяти 07:33 — Демонстрация 1: вызов функции strlen() из Java (нисходящий вызов) 07:46 — Пошаговый разбор кода 10:06 — Конфигурация запуска IntelliJ для --enable-preview и --enable-native-access 12:36 — Анализ вывода: ASCII против UTF-8 против UTF-16 (эмодзи «Ракета») (доказательство) 14:08 — Продвижение курса: Подробный обзор возможностей Java 21 15:06 — Демонстрация 2: Вызов функции qsort() в C (Upcall) 15:06 — Объяснение механизма заглушек Upcall 18:39 — Разбор кода: CallbackUpCall.java 19:06 — Вывод: отсортированный массив с помощью двунаправленного взаимодействия 20:00 — Демонстрация 3: Управление собственной памятью (5 примеров) 20:00 — Пример 1: Примитивы (выделение int и long) 21:37 — Пример 2: Массивы (непрерывные блоки собственной памяти) 22:27 — Пример 3: Типы сегментов памяти (native, array, buffer, mapped) 23:08 — Пример 4: Типы арен (confined, shared, auto) 24:05 — Пример 5: Безопасность памяти (пространственное и временное обеспечение) 25:19 — Когда Использование API FFM 25:56 — Ключевые моменты: Отсутствие кода на C, двунаправленность, безопасность памяти, автоматическая очистка, независимость от платформы 27:49 — Реклама курса и полный каталог курсов 31:51 — Заключение 🎓 Курс «Углубленное изучение возможностей Java 21»: https://www.udemy.com/course/java-21-... 💻 Исходный код: https://github.com/j2eeexpert2015/jav... 📚 Просмотреть все курсы LearningFromExperience: https://j2eeexpert2015.github.io/lear... 🔔 Подпишитесь на практические занятия по Java, Spring Boot, отладке и инструментам разработчика Уроки: https://www.youtube.com/@learningfrom... #Java21 #ProjectPanama #FFMAPI