FFM ist die neue API, die versucht, JNI zu ersetzen, und jep ist da. Es geht im Grunde darum, Funktionen außerhalb von JVM aufzurufen oder auf Speicher zuzugreifen, der nicht von JVM verwaltet wird. Ich wollte testen, ob FFM die reguläre Java-API schlagen kann. Unten finden Sie einen einfachen Test, der Mathe-Sin mit FFM und mit regulärem Math.sin ausführt
import java.lang.foreign.FunctionDescriptor; import java.lang.foreign.Linker; import java.lang.foreign.MemorySegment; import java.lang.foreign.SymbolLookup; import java.lang.foreign.ValueLayout; public class FFMSinTest { public static void main(String[] args) throws Throwable { Linker linker = Linker.nativeLinker(); SymbolLookup stdlib = linker.defaultLookup(); // Locate the "sin" function in the C math library MemorySegment sinAddress = stdlib.find("sin").orElseThrow(); FunctionDescriptor descriptor = FunctionDescriptor.of(ValueLayout.JAVA_DOUBLE, ValueLayout.JAVA_DOUBLE); var sinHandle = linker.downcallHandle(sinAddress, descriptor); double angle = Math.PI / 4; // 45 degrees in radians // Timing Java's Math.sin() long javaStartTime = System.nanoTime(); for (int i = 0; i < 1_000_000; i++) { double result = Math.sin(angle); } long javaEndTime = System.nanoTime(); long javaDuration = javaEndTime - javaStartTime; // Timing C sin via FFM long ffmStartTime = System.nanoTime(); for (int i = 0; i < 1_000_000; i++) { double result = (double) sinHandle.invoke(angle); } long ffmEndTime = System.nanoTime(); long ffmDuration = ffmEndTime - ffmStartTime; System.out.println("Java Math.sin() took: " + javaDuration / 1_000_000.0 + " ms"); System.out.println("C sin (FFM) took: " + ffmDuration / 1_000_000.0 + " ms"); } }
Und das Ergebnis ist
Java Math.sin() took: 4.8677 ms C sin (FFM) took: 78.9172 ms
Auf meinem Laptop lautet die Lektion „Das Aufrufen außerhalb der JVM ist kein billiger Prozess“?
Das obige ist der detaillierte Inhalt vonFFM (Foreign Function and Memory) Stdlib-Beispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!