Rumah > Java > javaTutorial > teks badan

Pengenalan kepada API Fungsi & Memori Asing (Projek Panama)

王林
Lepaskan: 2024-07-30 12:54:02
asal
972 orang telah melayarinya

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

Project Panama ialah inisiatif OpenJDK yang bertujuan untuk meningkatkan hubungan antara Java dan kod asli. Salah satu komponen utamanya ialah Foreign Function & Memory API, yang memudahkan dan mempertingkatkan cara aplikasi Java berinteraksi dengan perpustakaan dan memori asli.

Apakah API Fungsi & Memori Asing?

API Fungsi & Memori Asing membolehkan program Java memanggil fungsi asli dan mengurus memori asli secara langsung. API ini menyediakan cara yang lebih selamat dan cekap untuk melaksanakan operasi yang memerlukan Antara Muka Asli Java (JNI).

Faedah API Fungsi & Memori Asing

  1. Keselamatan: API termasuk ciri keselamatan untuk mengelakkan ralat biasa yang dikaitkan dengan kod asli, seperti kebocoran memori dan limpahan penimbal.
  2. Prestasi: Dengan membenarkan akses terus kepada fungsi dan memori asli, API boleh meningkatkan prestasi aplikasi Java dengan ketara yang perlu berinteraksi dengan perpustakaan asli.
  3. Kesederhanaan: API memudahkan proses memanggil kod asli berbanding JNI, mengurangkan boilerplate dan menjadikan kod lebih mudah untuk diselenggara.

Menggunakan API Fungsi & Memori Asing

Berikut ialah contoh cara menggunakan API Fungsi & Memori Asing untuk memanggil fungsi asli:

  1. Tentukan Tandatangan Fungsi Asli

Pertama, anda perlu mentakrifkan tandatangan fungsi asli yang ingin anda panggil. Katakan kita mempunyai perpustakaan C dengan fungsi berikut:

// native.c
#include <stdio.h>

void sayHello() {
    printf("Hello from C!\n");
}
Salin selepas log masuk
  1. Muat Perpustakaan Asli dan Panggil Fungsi
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();
        }
    }
}
Salin selepas log masuk

Dalam contoh ini:

  • Kami menggunakan SymbolLookup untuk mencari fungsi sayHello dalam pustaka asli yang dimuatkan.
  • Kami mencipta pemegang untuk fungsi menggunakan CLinker.
  • Kami memanggil fungsi asli menggunakan pemegang.

Mengurus Memori Asli

API Fungsi & Memori Asing juga membolehkan anda mengurus memori asli dengan selamat. Berikut ialah contoh:

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);
        }
    }
}
Salin selepas log masuk

Dalam contoh ini:

  • Kami memperuntukkan blok memori asli.
  • Kami menulis dan membaca satu bait daripada memori yang diperuntukkan.
  • Memori diagihkan secara automatik apabila sesi ditutup.

Kesimpulan

API Fungsi & Memori Asing ialah tambahan hebat kepada ekosistem Java, menyediakan cara yang lebih selamat, cekap dan lebih mudah untuk berinteraksi dengan kod dan memori asli. Sama ada anda perlu memanggil fungsi asli atau mengurus memori asli, API ini membuka kemungkinan baharu untuk aplikasi Java.

Atas ialah kandungan terperinci Pengenalan kepada API Fungsi & Memori Asing (Projek Panama). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan