Heim > Java > javaLernprogramm > FFM (Foreign Function and Memory) Stdlib-Beispiel

FFM (Foreign Function and Memory) Stdlib-Beispiel

Susan Sarandon
Freigeben: 2024-11-14 13:36:02
Original
1056 Leute haben es durchsucht

FFM (Foreign Function and Memory) Stdlib Example

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

Nach dem Login kopieren

Und das Ergebnis ist

Java Math.sin() took: 4.8677 ms
C sin (FFM) took: 78.9172 ms

Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage