Translate

domingo, 14 de junio de 2026

FFM API en Java: Accediendo a Memoria Nativa y Código Nativo sin JNI parte 2

 


Seguimos viendo FFM API

Dónde podemos usar FFM API:

Librerías de machine learning

Integración con:

  • CUDA,
  • TensorRT,
  • ONNX Runtime.


Motores gráficos

Bindings contra:

  • Vulkan,
  • OpenGL,
  • SDL.


Bases de datos

Drivers nativos de:

  • SQLite,
  • RocksDB.


Sistemas embebidos

  • Acceso a APIs del sistema operativo.
  • Upcalls: cuando C llama a Java


La FFM API también soporta: upcalls

Es decir:

  • código nativo llamando código Java.
  • Algo parecido a callbacks.


Veamos un ejemplo práctico: strlen


import java.lang.foreign.*;

import java.lang.invoke.MethodHandle;

import static java.lang.foreign.ValueLayout.*;


public class Main {

    public static void main(String[] args) throws Throwable {

         Linker linker = Linker.nativeLinker();

         MemorySegment strlenAddr =

                linker.defaultLookup()

                        .find("strlen")

                        .orElseThrow();

        MethodHandle strlen = linker.downcallHandle(

                strlenAddr,

                FunctionDescriptor.of(JAVA_LONG, ADDRESS)

        );


        try (Arena arena = Arena.ofConfined()) {

            MemorySegment text =

                    arena.allocateFrom("Hola Mundo");

            long size = (long) strlen.invoke(text);

            System.out.println(size);

        }

    }

}


FFM API esta disponible desde Java 21


La FFM API es probablemente uno de los cambios más importantes del ecosistema Java moderno.

Porque permite:

  • interoperabilidad nativa,
  • manejo eficiente de memoria,
  • reemplazar gran parte de JNI,
  • acceso a APIs del sistema,
  • y programación de bajo nivel.


Todo usando una API moderna y mucho más amigable.


Project Panama abre la puerta a una nueva generación de aplicaciones Java capaces de integrarse con el mundo nativo sin el dolor histórico de JNI.

No hay comentarios.:

Publicar un comentario