JNI Nedir? Java Yerel Arayüzü Açıklaması

JNI (Java Yerel Arayüzü), Java kodunun yerel C veya C++ fonksiyonlarını çağırmasına ve yerel kodun JVM'ye geri çağrı yapmasına olanak tanıyan köprüdür.

Conceptsby trqUpdated June 4, 2026
Key takeaways
  • JNI, JVM kodunun yerel C veya C++ fonksiyonlarını çağırmasına ve yerel kodun Java'ya geri çağırmasına olanak tanıyan yerleşik arayüzdür.
  • Bir native metodunun Java gövdesi yoktur; JVM, çalışma zamanında derlenmiş bir fonksiyona bağlar.
  • Programlar, yerel kütüphaneleri yeniden kullanmak, işletim sistemine erişmek, sık kullanılan yolları hızlandırmak veya donanımla etkileşim kurmak için bunu kullanır.
  • Sınır nettir: yerel çökmeler JVM'yi çökletebilir ve yerel derlemeler platforma özgüdür.

JNI, Java Yerel Arayüzü'dür; Java'nın yerleşik bir parçası olup, JVM üzerinde çalışan kodun C veya C++ ile yazılmış fonksiyonları çağırmasına ve bu yerel kodun Java'ya geri çağrı yapmasına olanak tanır. Bir Java programının JVM'nin dışına uzanarak bir platform kütüphanesini veya derlenmiş makine kodu parçasını kullanmasının yoludur.

Opal Nerede Çalışır

Opal, bir Fabric modudur, bu yüzden çoğunluğu düz Java'dır ve JavaScript ile kodlama yaparsınız, yerel kodu elle değiştirmeniz gerekmez. Başlamak için kurulum rehberine göz atın.

JNI Ne İşe Yarar

JNI, iki dünyayı birbirine bağlar: JVM üzerindeki yönetilen Java kodu ve makine talimatlarına derlenmiş yerel kodu. Bir Java metodu native olarak işaretlenir ve Java'da gövdesi bulunmaz. Çalışma zamanında JVM, yerel bir kütüphane yükler ve bu metodu eşleşen bir C veya C++ fonksiyonuyla ilişkilendirir. Ardından iki taraf, argümanları ve değerleri karşılıklı olarak iletir.

Yerel taraf bir JNIEnv işaretçisi alır. Bu tanıtıcı kapıdır: Java alanlarını okumak, Java metotlarını çağırmak, nesneler oluşturmak ve istisnalar fırlatmak için fonksiyonları açığa çıkarır. Böylece köprü tek yönlü değil, her iki yönde de çalışır.

Bir Program Neden Kullanır

Çoğu Java kodu JNI'ye ihtiyaç duymaz. Bir program, birkaç durumda ona uzanır:

  • Mevcut yerel kodu yeniden kullanmak. Olgun bir C veya C++ kütüphanesi zaten işi yapıyor ve onu Java'da yeniden yazmak değmez.
  • İşletim sistemine ulaşmak. Bazı platform özelliklerinin saf Java API'si yoktur, bu nedenle yerel bir çağrı tek yoldur.
  • Sıcak bir yolda hız. Sıkı bir sayısal veya düşük seviyeli rutin, JVM'de olduğundan daha hızlı derlenmiş yerel kod olarak çalışabilir.
  • Donanım veya sürücülere dokunmak. Grafik, ses ve cihaz erişimi genellikle yerel kütüphanelerin arkasında yaşar.

Bir JNI Çağrısı Nasıl Çalışır

Adımlar her platformda aynıdır.

AdımOlay
BildirBir Java metodu, native anahtar kelimesiyle yazılır ve gövdesi olmaz.
OluşturBir C veya C++ fonksiyonu, çalışma zamanında kullanılabilen bir paylaşımlı kütüphaneye (.dll, .so, .dylib) derlenir.
YükleJava, çalışma zamanında bu kütüphaneyi yüklemek için System.loadLibrary'yi çağırır.
BağlaJVM, native metodunu, adıyla C fonksiyonuna eşler.
ÇağırJava metodu çağırır; kontrol yerel koda geçer ve geri döner.

Fonksiyon adları, JVM'nin bunları bulabilmesi için sabit bir kalıbı takip eder ve oluşturulan başlık, uygulanacak kesin imzayı size bildirir.

Maliyetler ve riskler

JNI güçlüdür ancak keskin kenarları vardır. Yerel kodda bir çökme, JVM'nin tamamını düşürebilir çünkü bu kod JVM'nin güvenlik ağı dışında çalışır. Yerel tarafın ayırdığı bellek çöp toplama işlemine tabi olmadığından, sızıntılar kolayca oluşabilir. Java ve yerel kod arasında yapılan her geçişte ek yük vardır, bu nedenle sıkı bir döngüde sınırı aşmak yavaş olabilir. Ve yerel kütüphaneler platforma özeldir: Windows için oluşturulan bir derleme, ayrı bir derleme olmadan Linux'ta çalışmaz.

Dikkatli kullanın

Yerel sınır, JVM'nin güvenlik garantilerini atladığı için, JNI yalnızca saf Java ile çözülemeyen durumlarda başvurulan bir araçtır. Çoğu mod, Opal dahil, buna hiç ihtiyaç duymaz.

Sıkça Sorulan Sorular