Mengapa FFM berbanding JNI
Saling kendali natif yang lebih selamat
Mengapa FFM berbanding JNI ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Memanggil Kod Natif
Java kadangkala perlu memanggil pustaka C atau bekerja dengan memori luar timbunan. Cara klasik ialah Antara Muka Natif Java (JNI). Cara moden ialah API Fungsi Asing dan Memori (FFM), yang dimuktamadkan dalam Java 22 (JEP 454).
Pelajaran ini menerangkan sebab FFM merupakan pilihan yang lebih baik.
Keperluan JNI
JNI menyusahkan:
- Menulis kod penghubung C dengan tandatangan
JNIEXPORTyang janggal - Mengkompil pustaka natif dikongsi yang berasingan bagi setiap platform
- Menukar antara jenis Java dan C secara manual
- Kesilapan kecil boleh menyebabkan JVM ranap dengan mudah
FFM ialah Java Tulen
FFM membolehkan anda memanggil fungsi natif dan mengakses memori natif sepenuhnya daripada Java. Tiada kod penghubung C, tiada langkah kompilasi berasingan dan tiada penyusunan format secara manual.
Anda menerangkan tandatangan fungsi natif dalam Java dan memanggilnya melalui pemegang kaedah.
Pakej Utama
Segala-galanya berada dalam java.lang.foreign. Jenis utamanya ialah:
LinkerdanSymbolLookupuntuk mencari serta mengikat fungsiMemorySegmentuntuk memori natifArenauntuk jangka hayat yang boleh ditentukanMemoryLayoutdanFunctionDescriptoruntuk menerangkan bentuk
Lebih Selamat melalui Reka Bentuk
FFM jauh lebih selamat berbanding JNI:
- Akses memori dengan semakan sempadan
- Jangka hayat terikat pada
Arena, maka penggunaan selepas pembebasan dapat dikesan - Pembatasan akses menghalang capaian merentas utas yang tidak selamat
Kesilapan menghasilkan pengecualian Java dan bukannya menyebabkan VM ranap.
Pengenalan Ringkas kepada API
Lakaran ini mencari fungsi C strlen dan menyediakan pemegang untuknya. Intinya, semuanya ialah kod Java biasa.
import java.lang.foreign.*;
import java.lang.invoke.MethodHandle;
public class Main {
public static void main(String[] args) {
Linker linker = Linker.nativeLinker();
SymbolLookup stdlib = linker.defaultLookup();
MethodHandle strlen = linker.downcallHandle(
stdlib.find("strlen").orElseThrow(),
FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS));
System.out.println("Bound a handle to strlen: " + strlen);
}
}Prestasi
Panggilan ke bawah FFM setanding dengan JNI dan sering lebih pantas kerana pengkompil masa nyata boleh menyisipkan kod sebaris serta mengoptimumkan rintisan yang dijana. Tiada trampolin C bagi setiap panggilan untuk dilalui.
Mendayakan Capaian Natif
Oleh sebab kod natif boleh berbahaya, FFM mungkin memberikan amaran atau memerlukan pengaktifan pilihan. Anda memberikan capaian semasa pelancaran dengan --enable-native-access=ALL-UNNAMED (atau nama modul tertentu) untuk menyenyapkan amaran.
Menggantikan sun.misc.Unsafe
FFM (bersama API Memori) juga merupakan pengganti yang disokong untuk operasi memori luar timbunan sun.misc.Unsafe yang telah lama tidak digunakan. Pustaka yang mengurus penimbal natif secara manual boleh beralih kepada API yang selamat dan disokong.
Alat: jextract
Untuk pustaka C yang besar, alat pelengkap jextract membaca fail pengepala C dan menjana pengikatan FFM Java secara automatik. Anda tidak perlu menulis deskriptor secara manual.
Ia ialah pelengkap produktiviti kepada FFM, sama seperti penjana kod.
Bila Menggunakan FFM
Gunakan FFM apabila anda perlu:
- Memanggil pustaka C/C++ sedia ada
- Berinteraksi dengan OS pada tahap rendah
- Mengurus penimbal luar timbunan yang besar dengan cekap
Untuk kerja Java tulen, anda tidak memerlukannya.
Semakan Ringkas
Ingat kembali kelebihan utama berbanding JNI.
Imbas Kembali
Anda telah mempelajari sebab FFM lebih baik daripada JNI:
- Java tulen, tanpa kod pelekat C atau kompilasi tambahan
- Selamat: semakan sempadan, jangka hayat Arena dan pembatasan akses
- Prestasi setanding atau lebih baik
- Menggantikan
sun.misc.Unsafe; digandingkan denganjextract
Seterusnya: mengurus memori natif dengan MemorySegment dan Arena.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Mengapa FFM berbanding JNI” percuma?
Ya — teks penuh “Mengapa FFM berbanding JNI” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mengapa FFM berbanding JNI”?
Saling kendali natif yang lebih selamat Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Mengapa FFM berbanding JNI” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengapa FFM berbanding JNI
- MemorySegment dan Arena
- Pemegang Downcall
- Susun Atur dan Struct