Maison > Java > javaDidacticiel > le corps du texte

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

王林
Libérer: 2024-07-30 12:54:02
original
958 Les gens l'ont consulté

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 natives et à la mémoire, 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 rendant le code plus facile à maintenir.

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 <stdio.h>

void sayHello() {
    printf("Hello from C!\n");
}
Copier après la connexion
  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();
        }
    }
}
Copier après la connexion

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 en utilisant CLinker.
  • Nous appelons la fonction native à l'aide du handle.

Gestion de la mémoire native

L'API Foreign Function & Memory 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);
        }
    }
}
Copier après la connexion

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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!