"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Introduction à l'API Foreign Function & Memory (Projet Panama)

Introduction à l'API Foreign Function & Memory (Projet Panama)

Publié le 2024-08-06
Parcourir:312

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

Project Panama est une initiative OpenJDK visant à améliorer la connexion entre Java et le code natif. L'un de ses composants clés est l'API Foreign Function & Memory, qui simplifie et améliore la façon dont les applications Java interagissent avec les bibliothèques natives et la mémoire.

Qu'est-ce que l'API des fonctions étrangères et de la mémoire ?

L'API Foreign Function & Memory permet aux programmes Java d'appeler des fonctions natives et de gérer directement la mémoire native. Cette API offre un moyen plus sûr et plus efficace d'effectuer des opérations qui nécessiteraient autrement l'interface native Java (JNI).

Avantages de l'API de fonctions étrangères et de mémoire

  1. Sécurité : l'API inclut des fonctionnalités de sécurité pour éviter les erreurs courantes associées au code natif, telles que les fuites de mémoire et les débordements de mémoire tampon.
  2. Performances : en permettant un accès direct aux fonctions et à la mémoire natives, l'API peut améliorer considérablement les performances des applications Java qui doivent interagir avec les bibliothèques natives.
  3. Simplicité : l'API simplifie le processus d'appel du code natif par rapport à JNI, réduisant ainsi le passe-partout et facilitant la maintenance du code.

Utilisation de l'API de fonctions étrangères et de mémoire

Voici un exemple d'utilisation de l'API Foreign Function & Memory pour appeler une fonction native :

  1. Définir la signature de fonction native

Tout d'abord, vous devez définir la signature de la fonction native que vous souhaitez appeler. Supposons que nous ayons une bibliothèque C avec la fonction suivante :

// native.c
#include 

void sayHello() {
    printf("Hello from C!\n");
}
  1. Charger la bibliothèque native et appeler la fonction
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();
        }
    }
}

Dans cet exemple :

  • Nous utilisons SymbolLookup pour trouver la fonction sayHello dans la bibliothèque native chargée.
  • Nous créons un handle pour la fonction à l'aide de CLinker.
  • Nous appelons la fonction native à l'aide du handle.

Gestion de la mémoire native

L'API Foreign Function & Memory vous permet également de gérer la mémoire native en toute sécurité. Voici un exemple :

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

Dans cet exemple :

  • Nous allouons un bloc de mémoire native.
  • Nous écrivons et lisons un octet de la mémoire allouée.
  • La mémoire est automatiquement libérée à la fermeture de la session.

Conclusion

L'API Foreign Function & Memory est un ajout puissant à l'écosystème Java, offrant un moyen plus sûr, plus efficace et plus simple d'interagir avec le code et la mémoire natifs. Que vous ayez besoin d'appeler des fonctions natives ou de gérer de la mémoire native, cette API ouvre de nouvelles possibilités pour les applications Java.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/adaumircosta/introduction-to-the-foreign-function-memory-api-project-panama-20c8?1 En cas de violation, veuillez contacter [email protected] pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3