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