„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Einführung in die Foreign Function & Memory API (Projekt Panama)

Einführung in die Foreign Function & Memory API (Projekt Panama)

Veröffentlicht am 06.08.2024
Durchsuche:168

Introduction to the Foreign Function & Memory API (Project Panama)

Project Panama ist eine OpenJDK-Initiative, die darauf abzielt, die Verbindung zwischen Java und nativem Code zu verbessern. Eine seiner Schlüsselkomponenten ist die Foreign Function & Memory API, die die Art und Weise vereinfacht und verbessert, wie Java-Anwendungen mit nativen Bibliotheken und Speicher interagieren.

Was ist die Foreign Function & Memory API?

Die Foreign Function & Memory API ermöglicht es Java-Programmen, native Funktionen aufzurufen und nativen Speicher direkt zu verwalten. Diese API bietet eine sicherere und effizientere Möglichkeit, Vorgänge auszuführen, die andernfalls das Java Native Interface (JNI) erfordern würden.

Vorteile der Foreign Function & Memory API

  1. Sicherheit: Die API enthält Sicherheitsfunktionen, um häufige Fehler im Zusammenhang mit nativem Code zu verhindern, wie z. B. Speicherlecks und Pufferüberläufe.
  2. Leistung: Durch den direkten Zugriff auf native Funktionen und Speicher kann die API die Leistung von Java-Anwendungen, die mit nativen Bibliotheken interagieren müssen, erheblich verbessern.
  3. Einfachheit: Die API vereinfacht den Prozess des Aufrufs von nativem Code im Vergleich zu JNI, reduziert den Boilerplate und erleichtert die Wartung des Codes.

Verwendung der Foreign Function & Memory API

Hier ist ein Beispiel für die Verwendung der Foreign Function & Memory API zum Aufrufen einer nativen Funktion:

  1. Definieren Sie die native Funktionssignatur

Zuerst müssen Sie die Signatur der nativen Funktion definieren, die Sie aufrufen möchten. Angenommen, wir haben eine C-Bibliothek mit der folgenden Funktion:

// native.c
#include 

void sayHello() {
    printf("Hello from C!\n");
}
  1. Laden Sie die native Bibliothek und rufen Sie die Funktion auf
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();
        }
    }
}

In diesem Beispiel:

  • Wir verwenden SymbolLookup, um die Funktion sayHello in der geladenen nativen Bibliothek zu finden.
  • Wir erstellen ein Handle für die Funktion mit CLinker.
  • Wir rufen die native Funktion mit dem Handle auf.

Verwalten des nativen Speichers

Die Foreign Function & Memory API ermöglicht Ihnen auch die sichere Verwaltung des nativen Speichers. Hier ist ein Beispiel:

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);
        }
    }
}

In diesem Beispiel:

  • Wir weisen einen Block nativen Speichers zu.
  • Wir schreiben und lesen ein Byte aus dem zugewiesenen Speicher.
  • Der Speicher wird automatisch freigegeben, wenn die Sitzung geschlossen wird.

Abschluss

Die Foreign Function & Memory API ist eine leistungsstarke Ergänzung des Java-Ökosystems und bietet eine sicherere, effizientere und einfachere Möglichkeit, mit nativem Code und Speicher zu interagieren. Unabhängig davon, ob Sie native Funktionen aufrufen oder nativen Speicher verwalten müssen, eröffnet diese API neue Möglichkeiten für Java-Anwendungen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/adaumircosta/introduction-to-the-foreign-function-memory-api-project-panama-20c8?1 Bei Verstößen wenden Sie sich bitte an [email protected] um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3