JNI-Genel Bakış
Bir JVM ' nin bakış açısıyla, iki tip kod vardır: "Java™" ve "native". Java Native Interface (JNI), ikisi arasında iyi tanımlanmış ve platformdan bağımsız bir arabirim oluşturur.
Yerel kod, Java ile iki ayrı şekilde birlikte kullanılabilir: çalışan bir JVM 'de "yerel yöntemler" olarak ve "Başlatma API"' yı kullanarak bir JVM oluşturan kod olarak. Bu bölüm, farkı açıklar.
Yerel yöntemler
Java yerel yöntemleri Java dilinde bildirilmiş, başka bir dilde (C ya da C + + gibi) uygulanır ve JVM tarafından gerektiği şekilde yüklenir. Yerel yöntemleri kullanmak için şunları yapmak gerekir:
- Java kodunuzdaki yerel yöntemibildirme .
Javac derleyicisi Java kaynak kodunda yerel bir yöntem bildirimiyle karşılaştığında, yönteme ilişkin adı ve değiştirgeleri kaydeder. Java kaynak kodu somutlama içermediği için, derleyici yöntemi "yerli" olarak işaretler. Daha sonra, JVM çağrıldığında yöntemi doğru şekilde çözebilir.
- Yerel yöntemiuygulayın .
Yerel yöntemler, yüklenebilir bir ikili kitaplıkta dış giriş noktaları olarak uygulanır. Bir yerel kitaplığın içeriği platforma özeldir. JNI, JVM ' nin platforma bağımsız bir şekilde yerel yöntemleri kullanması için bir yol sağlar.
JVM yerel yöntemlere çağrılar gerçekleştirir. JVM yerel bir yöntemde olduğunda, JNI JVM ' ye "geri arama" yolunu sağlar.
- VM ' in kullanması için yerel yöntem kodunuyükleyin .
Yerel yöntemin bildirildiği gibi, yürütme sırasında yöntemi içeren yerel kitaplığı bulmalı ve yüklemelisiniz.
İki Java arabirimi yerli kitaplığı yükler:
- java.lang.System.load()
- java.lang.System.loadLibrary()
Tipik olarak, yerel yöntemleri bildiren bir sınıf, yerel kitaplığı durağan kullanıma hazırlayıcısında yükler.
Çağırma API
JVM yaratılması yerel kod içerir. Bu amaçla kullanılan JNI ' nin en yönünün adı JNI Çağırma API 'si olarak adlandırılır. Başlatma API 'sini kullanmak için, uygulamaya özgü bir paylaşılan kitaplığa (statik ya da dinamik olarak) bağlantın ve JNI_ * işlevlerini dışa aktarmaya çağırmanızı sağlar.
JNI belirtimi ve somutlaması
JNI belirtimi, seçilen somutlama ayrıntılarında belirsiz. Yalın ve genişletilebilir C ve C++ yerel arabirimleri için yeniden kullanılır bir çerçeve sağlar. JNI modeli ayrıca JVMTI belirtiminin temelini de içerir.
Oracle Corporation ticari marka belirtimi ve Java Compatibility Kit (JCK), belirtime uygunluğu sağlar, ancak somutlamaya uymaz. Yerel kod, belirtime ve somutlamaya uygun olmalıdır. Belirlenmemiş davranışlara karşı yazılan kod, taşınabilirlik ve ileri uyumluluk sorunlarına eğilimli olur.