ホームページ >Java >&#&チュートリアル >外部関数およびメモリ API の概要 (プロジェクト パナマ)
Project Panama は、Java とネイティブ コード間の接続を改善することを目的とした OpenJDK イニシアチブです。その重要なコンポーネントの 1 つは外部関数およびメモリ API です。これは、Java アプリケーションがネイティブ ライブラリおよびメモリと対話する方法を簡素化および強化します。
外部関数とメモリ API を使用すると、Java プログラムがネイティブ関数を呼び出し、ネイティブ メモリを直接管理できるようになります。この API は、Java Native Interface (JNI) を必要とする操作を実行するための、より安全かつ効率的な方法を提供します。
外部関数とメモリ API を使用してネイティブ関数を呼び出す方法の例を次に示します。
まず、呼び出したいネイティブ関数のシグネチャを定義する必要があります。次の関数を含む C ライブラリがあるとします:
// native.c #include <stdio.h> void sayHello() { printf("Hello from C!\n"); }
import jdk.incubator.foreign.*; public class ForeignFunctionExample { public static void main(String[] args) { try (var session = MemorySession.openConfined()) { SymbolLookup lookup = SymbolLookup.loaderLookup(); var sayHello = lookup.find("sayHello").orElseThrow(); var sayHelloHandle = CLinker.getInstance().downcallHandle( sayHello, FunctionDescriptor.ofVoid() ); sayHelloHandle.invokeExact(); } catch (Throwable t) { t.printStackTrace(); } } }
この例では:
外部関数とメモリ API を使用すると、ネイティブ メモリを安全に管理することもできます。以下に例を示します:
import jdk.incubator.foreign.*; public class MemoryManagementExample { public static void main(String[] args) { try (var session = MemorySession.openConfined()) { MemorySegment segment = MemorySegment.allocateNative(100, session); MemoryAccess.setByteAtOffset(segment, 0, (byte) 42); byte value = MemoryAccess.getByteAtOffset(segment, 0); System.out.println("Value: " + value); } } }
この例では:
Foreign Function & Memory API は Java エコシステムへの強力な追加機能であり、ネイティブ コードとメモリを操作するためのより安全、より効率的、簡単な方法を提供します。ネイティブ関数を呼び出す必要がある場合でも、ネイティブ メモリを管理する必要がある場合でも、この API は Java アプリケーションの新しい可能性を開きます。
以上が外部関数およびメモリ API の概要 (プロジェクト パナマ)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。