亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Jadual Kandungan
1. Mengapa anda memerlukan API Fungsi & Memori Asing?
2. Penjelasan terperinci mengenai komponen teras
2. Valuelayout dan MemoryLayout: Definisi susun atur memori
3. Symbollookup: Cari Simbol Fungsi Tempatan
4. FunctionDescriptor dan Methodhandle: Tentukan dan panggil fungsi luaran
Contoh: Memanggil printf of C
3. Memanggil perpustakaan tempatan tersuai (contoh mudah)
Iv. Arena: Pengurusan kitaran hayat ingatan
5. Kelebihan berbanding dengan JNI
6. Status dan langkah berjaga -jaga semasa
Rumah Java javaTutorial API Fungsi & Memori Asing di Java 21

API Fungsi & Memori Asing di Java 21

Jul 29, 2025 am 01:16 AM
java api

Java 21 memperkenalkan API Fungsi & Memori Asing untuk menyelesaikan kerumitan, keselamatan yang lemah, dan overhead prestasi besar JNI; 2. Komponen teras termasuk memori (abstraksi memori), valuelayout/memoriLayout (susun atur memori), Symbollookup (fungsi simbol fungsi), fungsiDescriptor dan MethodHandle (definisi panggilan fungsi), arena (pengurusan hayat memori); 3. Kod Java Pure boleh memanggil fungsi tempatan dan mengendalikan memori luar-hapas dengan selamat dan cekap, tanpa menulis kod C atau mengurus memori secara manual; 4. Berbanding dengan JNI, API FFM menyediakan keselamatan jenis yang lebih kuat, pengurusan memori automatik, prestasi yang lebih baik dan keselamatan yang lebih tinggi; 5. Pada masa ini di Java ciri pratonton dalam 21 memerlukan Pred-Preview. Ia tidak disyorkan untuk digunakan dalam persekitaran pengeluaran dan dijangka akan dikeluarkan secara rasmi dalam versi berikutnya.

API Fungsi & Memori Asing di Java 21

Java 21 memperkenalkan API Fungsi & Memori Asing (FFM API), satu ciri baru yang penting yang direka untuk membolehkan program Java dengan selamat dan cekap memanggil perpustakaan tempatan (seperti perpustakaan pautan dinamik yang ditulis dalam C/C) dan berinteraksi dengan memori luar. Ia menggantikan JNI yang lama tetapi bermasalah (antara muka asli Java), menyediakan cara yang lebih moden, ringkas dan selamat untuk mengendalikan interoperabilitas dengan kod asli.

API Fungsi & Memori Asing di Java 21

Matlamat utama API ini adalah untuk membolehkan Java mengakses fungsi dan ingatan tempatan secara semulajadi seperti memanggil kaedah tempatan, sambil mengelakkan kerumitan dan risiko keselamatan JNI.


1. Mengapa anda memerlukan API Fungsi & Memori Asing?

Sebelum Java 21, berinteraksi dengan kod asli terutamanya bergantung kepada JNI , tetapi ia mempunyai banyak masalah:

API Fungsi & Memori Asing di Java 21
  • Kompleks dan rumit : Ia memerlukan menulis kod C, menjana fail header, menyusun perpustakaan bersama, dan proses pembangunan tidak lancar.
  • Ralat ralat : Mengurus memori dan jenis penukaran secara manual dengan mudah boleh menyebabkan kemalangan (seperti Segfaults).
  • Overhead Prestasi : Panggilan JNI mempunyai kos penukaran konteks yang tinggi.
  • Keselamatan yang lemah : Operasi langsung petunjuk, kekurangan pemeriksaan akses memori.

Kemunculan API Fungsi & Memori Asing adalah untuk menyelesaikan masalah ini dan menyediakan cara Java tulen untuk melaksanakan panggilan fungsi luaran dan operasi ingatan.


2. Penjelasan terperinci mengenai komponen teras

API FFM kebanyakannya terdiri daripada kelas utama berikut, yang terletak di java.lang.foreign Package:

API Fungsi & Memori Asing di Java 21

1. Memorysegment: Abstraksi Memori Luar Heap

MemorySegment mewakili kawasan memori yang berterusan, yang boleh masuk atau keluar dari timbunan, atau memori tempatan. Ia adalah enkapsulasi ingatan mentah yang selamat.

 // memperuntukkan 100 bait memori luar-hap (segmen memori = memoriSegment.allocatenative (100)) {
    segmen.set (java_int, 0, 42); // tulis int pada offset 0
    int value = segment.get (java_int, 0); // baca System.out.println (nilai); // output 42
}
  • Gunakan allocateNative() untuk memperuntukkan memori tempatan.
  • Gunakan kaedah set() / get() untuk bekerjasama dengan ValueLayout (seperti JAVA_INT ) untuk membaca dan menulis yang ditaip.
  • Ia mesti digunakan dalam try-with-resources untuk memastikan memori itu dikeluarkan dalam masa.

2. Valuelayout dan MemoryLayout: Definisi susun atur memori

Digunakan untuk menggambarkan susun atur struktur data, seperti jenis asas, struktur, tatasusunan, dll.

 VALUELAYOUT.OFINT INT = VALUELAYOUT.JAVA_INT;
SequenceLayout ArrayLayout = MemoryLayout.SequenceLayout (10, int); // int [10]

Susun atur ini boleh digunakan untuk membina jenis parameter fungsi atau peta struktur.

3. Symbollookup: Cari Simbol Fungsi Tempatan

Digunakan untuk mencari alamat fungsi dalam perpustakaan dinamik.

 Symbollookup lookup = symbollookup.librarylookup ("libc.so.6"); // linux
// atau symbollookup.librarylookup ("msvcrt.dll") di Windows

4. FunctionDescriptor dan Methodhandle: Tentukan dan panggil fungsi luaran

FunctionDescriptor menerangkan parameter dan jenis pulangan fungsi, dan menggabungkan Linker untuk mendapatkan MethodHandle yang boleh dipanggil.

Contoh: Memanggil printf of C
 import java.lang.Foreign.*;
import statik java.lang.foreign.valuelayout.*;

Linker Linker = Linker.NativeLinker ();
Symbollookup stdlib = linker.defaultlookup ();

// Tentukan tandatangan fungsi printf: int printf (const char*, ...)
FunctionDescriptor printFDesc = functionDescriptor.of (java_int, alamat);

MethodHandle printf = linker.downCallHandle (stdlib.find ("printf"). Orelsethrow (), printFDesc);

// Sediakan rentetan (mesti berakhir dengan null)
cuba (arena arena = arena.ofconfined ()) {
    Format MemorySegment = arena.allocateFrom ("Hello from %s! \ N");
    Nama MemorySegment = Arena.AllococRrom ("FFM API");

    // Call Printf
    printf.invoke (format, nama);
}

Output:

 Helo dari FFM API!

Nota: Fungsi parameter pembolehubah menyokong sokongan terhad. Dalam contoh ini, hanya dua parameter yang diluluskan, jadi anda perlu berhati -hati apabila menggunakannya.


3. Memanggil perpustakaan tempatan tersuai (contoh mudah)

Katakan anda mempunyai fungsi C:

 // libadd.so (linux) / add.dll (Windows)
int tambah (int a, int b) {
    kembali AB;
}

Setelah menyusun perpustakaan bersama, panggilnya di Java:

 cuba (arena arena = arena.ofconfined ()) {
    Linker Linker = Linker.NativeLinker ();
    Symbollookup lookup = linker.defaultlookup (); // atau tentukan fungsi PathDescriptor addDesc = functionDescriptor.of (java_int, java_int, java_int);
    MethodHandle Add = Linker.DownCallHandle (
        lookup.find ("tambah"). Orelsethrow (),
        adddesc
    );

    int hasil = (int) add.invoke (3, 4);
    System.out.println ("3 4 =" hasil); // output 7
}

Tidak perlu menulis kod JNI, ia dilakukan sepenuhnya di lapisan Java.


Iv. Arena: Pengurusan kitaran hayat ingatan

Java 21 memperkenalkan konsep arena untuk menyatukan kitaran hayat MemorySegment .

  • Arena.ofConfined() : Akses benang tunggal, prestasi yang baik.
  • Arena.ofShared() : perkongsian pelbagai threaded, lebih selamat tetapi dengan overhead penyegerakan.
 cuba (arena arena = arena.ofconfined ()) {
    MemoriSegment seg = arena.allocate (100);
    // Gunakan seg ...
} // melepaskan semua memori secara automatik

Ini adalah mekanisme utama untuk mencegah kebocoran ingatan.


5. Kelebihan berbanding dengan JNI

ciri Jni FFM API
Adakah anda memerlukan kod asli? Ya tidak
Pengurusan memori Manual (terdedah kepada kesilapan) Pengurusan Automatik Arena
Jenis keselamatan Lemah (definisi makro) Kuat (Valaseelayout)
prestasi Umumnya, overhead panggilan tinggi Lebih baik, JVM dapat dioptimumkan
Kemudahan penggunaan kompleks Jawa yang sederhana, tulen
Keselamatan Rendah (penunjuk langsung) Tinggi (cek sempadan)

6. Status dan langkah berjaga -jaga semasa

  • Ciri pratonton masih dalam Java 21 , dan pilihan pratonton perlu diaktifkan:
     Javac-Release 21-Tenable-Preview Yourclass.java
    Java-yang boleh dipamerkan Yourclass
  • API boleh diselaraskan pada masa akan datang dan tidak disyorkan untuk digunakan dalam persekitaran pengeluaran sehingga mereka menjadi kekal (Java 22 atau 23 dijangka).
  • Sokongan untuk struktur kompleks (seperti struktur bersarang, kesatuan) sedang diperbaiki.
  • Keserasian silang platform memerlukan perhatian kepada nama perpustakaan dan menelefon konvensyen (seperti STDCall untuk Windows).

  • Pada dasarnya itu sahaja. API Fungsi & Memori Asing adalah langkah penting bagi Java untuk pengaturcaraan peringkat sistem, menandakan bahawa Java menjadi lebih "dekat dengan perkakasan" sambil tetap selamat dan ringkas. Ia secara beransur-ansur akan menjadi penyelesaian pilihan untuk senario yang memerlukan panggilan tempatan berprestasi tinggi (seperti pangkalan data, integrasi perpustakaan AI, alat sistem operasi).

    Atas ialah kandungan terperinci API Fungsi & Memori Asing di Java 21. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Membina API Restful di Jawa dengan Jakarta EE Membina API Restful di Jawa dengan Jakarta EE Jul 30, 2025 am 03:05 AM

SetupaMaven/gradleprojectwithjax-rsdependencyiSejersey; 2.createarescresourceUsingAnnotationssuchas@pathand@get; 3.configuretheapplicationviaapplicationsubclassorweb.xml;

Panduan Pemaju untuk Maven untuk Pengurusan Projek Java Panduan Pemaju untuk Maven untuk Pengurusan Projek Java Jul 30, 2025 am 02:41 AM

Maven adalah alat standard untuk pengurusan dan pembinaan projek Java. Jawapannya terletak pada hakikat bahawa ia menggunakan pom.xml untuk menyeragamkan struktur projek, pengurusan pergantungan, automasi kitaran hayat pembinaan dan sambungan pemalam; 1. Gunakan pom.xml untuk menentukan kumpulan, artifactid, versi dan kebergantungan; 2. Perintah teras utama seperti mvnclean, penyusun, ujian, pakej, memasang dan menggunakan; 3. Gunakan DependencyManagement dan Pengecualian untuk Menguruskan Versi Ketergantungan dan Konflik; 4. Mengatur aplikasi besar melalui struktur projek multi-modul dan diuruskan secara seragam oleh POM induk; 5.

CSS Dark Mode Togol Contoh CSS Dark Mode Togol Contoh Jul 30, 2025 am 05:28 AM

Pertama, gunakan JavaScript untuk mendapatkan pilihan sistem pengguna dan tetapan tema yang disimpan di dalam negara, dan memulakan tema halaman; 1. Struktur HTML mengandungi butang untuk mencetuskan Topik Switching; 2. CSS menggunakan: Root untuk menentukan pembolehubah tema yang cerah, kelas mod-mode mentakrifkan pembolehubah tema gelap, dan menggunakan pembolehubah ini melalui VAR (); 3. JavaScript mengesan lebih suka skema-skema dan membaca LocalStorage untuk menentukan tema awal; 4. Tukar kelas mod gelap pada elemen HTML apabila mengklik butang, dan menjimatkan keadaan semasa ke LocalStorage; 5. Semua perubahan warna disertakan dengan animasi peralihan 0.3 saat untuk meningkatkan pengguna

Contoh Menu Dropdown CSS Contoh Menu Dropdown CSS Jul 30, 2025 am 05:36 AM

Ya, menu drop-down CSS biasa boleh dilaksanakan melalui HTML dan CSS tulen tanpa JavaScript. 1. Gunakan UL dan Li bersarang untuk membina struktur menu; 2. Gunakan: Hover pseudo-Class untuk mengawal paparan dan menyembunyikan kandungan tarik-turun; 3. Tetapkan Kedudukan: Relatif untuk Ibu Bapa Li, dan submenu diletakkan menggunakan kedudukan: mutlak; 4. Submenu mungkir untuk memaparkan: Tiada, yang menjadi paparan: blok apabila melayang; 5. Multi-level pull-down boleh dicapai melalui bersarang, digabungkan dengan peralihan, dan menambah animasi pudar, dan disesuaikan dengan terminal mudah alih dengan pertanyaan media. Penyelesaian keseluruhannya mudah dan tidak memerlukan sokongan JavaScript, yang sesuai untuk besar

Bagaimana cara menggunakan java messagedigest untuk hashing (MD5, SHA-256)? Bagaimana cara menggunakan java messagedigest untuk hashing (MD5, SHA-256)? Jul 30, 2025 am 02:58 AM

Untuk menjana nilai hash menggunakan Java, ia boleh dilaksanakan melalui kelas MessageDigest. 1. Dapatkan contoh algoritma yang ditentukan, seperti MD5 atau SHA-256; 2. Panggil kaedah .Update () untuk lulus dalam data untuk disulitkan; 3. Panggil kaedah .digest () untuk mendapatkan pelbagai hash byte; 4. Tukar array byte ke dalam rentetan heksadesimal untuk membaca; Untuk input seperti fail besar, baca dalam ketulan dan panggilan .Update () beberapa kali; Adalah disyorkan untuk menggunakan SHA-256 dan bukannya MD5 atau SHA-1 untuk memastikan keselamatan.

Contoh Rentetan Tarikh Python Python Contoh Rentetan Tarikh Python Python Jul 30, 2025 am 03:32 AM

Gunakan DateTime.StrpTime () untuk menukar rentetan tarikh ke dalam objek DateTime. 1. Penggunaan Asas: Parse "2023-10-05" sebagai objek DateTime melalui "%y-%m-%d"; 2. Menyokong pelbagai format seperti "%m/%d/%y" untuk menghuraikan tarikh Amerika, "%d/%m/%y" untuk menghuraikan tarikh British, "%b%d,%y%i:%m%p" untuk menghuraikan masa dengan am/pm; 3. Gunakan dateUtil.parser.parse () untuk secara automatik menyimpulkan format yang tidak diketahui; 4. Gunakan .D

VSCODE SETTINGS.JSON Lokasi VSCODE SETTINGS.JSON Lokasi Aug 01, 2025 am 06:12 AM

Fail Tetapan.JSON terletak di laluan peringkat pengguna atau ruang kerja dan digunakan untuk menyesuaikan tetapan vscode. 1. Laluan peringkat pengguna: Windows adalah C: \ Users \\ AppData \ Roaming \ code \ user \ settings.json, macOS adalah /users//library/applicationsupport/code/user/settings.json, linux adalah/ 2. Laluan Tahap Ruang Kerja: .VSCODE/Tetapan dalam Direktori Root Projek

Teks Teks Sublime Tutup HTML Teks Teks Sublime Tutup HTML Jul 30, 2025 am 02:41 AM

Memasang plug-in Emmet boleh mencapai penutupan automatik pintar tag dan sintaks singkatan sokongan; 2. Dayakan "AUTO_MATCH_ENABLED": benar untuk membolehkan SUBLIME untuk melengkapkan tag mudah secara automatik; 3. Gunakan alt. (Menang) atau peralihan CTRL. (Mac) Kekunci pintasan untuk menutup secara manual tag semasa - disyorkan untuk menggunakan Emmet dalam kehidupan seharian. Dua kaedah yang terakhir boleh digabungkan, yang cekap dan mudah untuk ditetapkan.

See all articles