JNI 【Java Native Interface】
概要
JNI(Java Native Interface)とは、Java言語で開発されたプログラムと、他の言語で開発されたプログラムを連携させるための標準的な方法を定めた仕様。Javaバイトコードとネイティブコードが互いに相手の機能を利用できるようにすることができる。Javaで記述されたソースコードはJavaバイトコードという中間形式のプログラムに変換されて配布され、実行時にJava仮想マシン(JVM)によって実行環境に固有のプログラム形式(ネイティブコード)に変換されながら実行される。これにより、単一のバイトコードを様々な機種やオペレーティングシステム(OS)で同じように動作させることができる。
この方式だと、開発者はJava以外の言語で特定のプラットフォーム向けに開発された外部のプログラムの機能を利用したり、逆に外部のプログラムからJavaプログラムを呼び出したりすることができないため、両者の橋渡しを可能にする標準的な方法としてJNIが定められた。
C言語やC++言語、アセンブリ言語などでプログラムを開発する際に、JNIの仕様に則ってコードを記述すると、関数などをJavaプログラムから呼び出して実行し、結果をJavaプログラム側へ返却するような仕組みを作ることができる。逆に、JVMに対して特定のJavaプログラムの実行を依頼するようなネイティブコードのプログラムを開発することもできる。
JNIは、Javaの仕様の範囲ではどうしても開発することができない特定のハードウェアやOSの機能を利用するプログラムが必要な場合や、機種固有のネイティブコードによって高速に実行したい箇所がある場合などに利用される。ネイティブコードの形式はCPUやOSの種類によって様々であるため、JNIで連携している部分についてはターゲット環境以外では動作しなくなる。
(2022.8.18更新)