"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Introducción a la API de Memoria y Función Extranjera (Proyecto Panamá)

Introducción a la API de Memoria y Función Extranjera (Proyecto Panamá)

Publicado el 2024-08-06
Navegar:641

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

Project Panama es una iniciativa OpenJDK destinada a mejorar la conexión entre Java y el código nativo. Uno de sus componentes clave es la API de memoria y funciones externas, que simplifica y mejora la forma en que las aplicaciones Java interactúan con las bibliotecas y la memoria nativas.

¿Qué es la API de memoria y funciones externas?

La API de memoria y función externa permite que los programas Java llamen a funciones nativas y administren la memoria nativa directamente. Esta API proporciona una forma más segura y eficiente de realizar operaciones que de otro modo requerirían la interfaz nativa de Java (JNI).

Beneficios de la API de memoria y funciones externas

  1. Seguridad: La API incluye funciones de seguridad para evitar errores comunes asociados con el código nativo, como pérdidas de memoria y desbordamientos del búfer.
  2. Rendimiento: al permitir el acceso directo a las funciones y la memoria nativas, la API puede mejorar significativamente el rendimiento de las aplicaciones Java que necesitan interactuar con bibliotecas nativas.
  3. Simplicidad: La API simplifica el proceso de llamar al código nativo en comparación con JNI, lo que reduce el texto estándar y hace que el código sea más fácil de mantener.

Uso de la API de función y memoria externa

A continuación se muestra un ejemplo de cómo utilizar la API de función y memoria externa para llamar a una función nativa:

  1. Definir la firma de la función nativa

Primero, debe definir la firma de la función nativa que desea llamar. Supongamos que tenemos una biblioteca C con la siguiente función:

// native.c
#include 

void sayHello() {
    printf("Hello from C!\n");
}
  1. Cargar la biblioteca nativa y llamar a la funció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();
        }
    }
}

En este ejemplo:

  • Usamos SymbolLookup para encontrar la función sayHello en la biblioteca nativa cargada.
  • Creamos un identificador para la función usando CLinker.
  • Llamamos a la función nativa usando el identificador.

Gestión de la memoria nativa

La API de memoria y funciones externas también le permite administrar la memoria nativa de forma segura. Aquí tienes un ejemplo:

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

En este ejemplo:

  • Asignamos un bloque de memoria nativa.
  • Escribimos y leemos un byte de la memoria asignada.
  • La memoria se desasigna automáticamente cuando se cierra la sesión.

Conclusión

La API de función y memoria externa es una poderosa adición al ecosistema Java, que proporciona una forma más segura, eficiente y sencilla de interactuar con el código y la memoria nativos. Ya sea que necesite llamar a funciones nativas o administrar la memoria nativa, esta API abre nuevas posibilidades para las aplicaciones Java.

Declaración de liberación Este artículo se reproduce en: https://dev.to/adaumircosta/introduction-to-the-foreign-function-memory-api-project-panama-20c8?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarlo.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3