ホームページ >Java >&#&チュートリアル >FFM (外部関数およびメモリ) 標準ライブラリの例

FFM (外部関数およびメモリ) 標準ライブラリの例

Susan Sarandon
Susan Sarandonオリジナル
2024-11-14 13:36:021099ブラウズ

FFM (Foreign Function and Memory) Stdlib Example

FFM は JNI を置き換えようとする新しい API であり、jep がここにあります。基本的には、JVM の外部で関数を呼び出すか、JVM によって管理されないメモリにアクセスします。 FFM が通常の Java API に勝てるかどうかをテストしたかったのです。以下に、FFM と通常の Math.sin
を使用して数学 sin を実行する簡単なテストを示します。

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

その結果は

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

私のラップトップでの教訓は、「JVM の外部への呼び出しは安価なプロセスではない」ということですか?

以上がFFM (外部関数およびメモリ) 標準ライブラリの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。