Project Panama는 Java와 네이티브 코드 간의 연결 개선을 목표로 하는 OpenJDK 이니셔티브입니다. 핵심 구성 요소 중 하나는 Java 애플리케이션이 기본 라이브러리 및 메모리와 상호 작용하는 방식을 단순화하고 향상시키는 Foreign Function & Memory API입니다.
외부 함수 및 메모리 API를 사용하면 Java 프로그램이 기본 함수를 호출하고 기본 메모리를 직접 관리할 수 있습니다. 이 API는 JNI(Java Native Interface)가 필요한 작업을 수행하는 더 안전하고 효율적인 방법을 제공합니다.
다음은 Foreign Function & Memory API를 사용하여 기본 함수를 호출하는 방법의 예입니다.
먼저 호출하려는 네이티브 함수의 시그니처를 정의해야 합니다. 다음 함수를 가진 C 라이브러리가 있다고 가정합니다:
// native.c #includevoid 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(); } } }
이 예에서는:
Foreign Function & Memory 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); } } }
이 예에서는:
외부 함수 및 메모리 API는 Java 생태계에 추가된 강력한 기능으로, 네이티브 코드 및 메모리와 상호 작용하는 더 안전하고 효율적이며 쉬운 방법을 제공합니다. 네이티브 함수를 호출해야 하거나 네이티브 메모리를 관리해야 하는 경우 이 API는 Java 애플리케이션에 대한 새로운 가능성을 열어줍니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3