第6章ネイティブメソッドインターフェイス
ShangシリコンバレーのSongHongkangが説明したJVM:bilibili link
-
ローカルメソッドとは何ですか?
- 簡単に言うと、ネイティブメソッドは、JavaがJava以外のコードを呼び出すためのインターフェイスです。ネイティブメソッドはJavaメソッドです。メソッドの実装は、Cなどの非Java言語で実装されます。この機能はJavaに固有のものではありません。他の多くのコンパイル言語にはこのメカニズムがあります。たとえば、C ++では、extern "C"を使用して、C ++コンパイラにC関数を呼び出すように指示できます。
- 「ネイティブメソッドは、その実装がnono-javaコードによって提供されるJavaメソッドです。」
- ネイティブメソッドを定義する場合、実装本体はJava以外の言語で実装されるため、実装本体は提供されません(Javaインターフェイスの定義に似ています)。
- ネイティブメソッドの役割は、Java用のさまざまなプログラミング言語を統合することであり、その本来の目的は、C / C ++プログラムを統合することです。
-
コードデモ
public class IHaveNatives { public native void Native1(int x); public native static long Native2(); private native synchronized float Native3(Object o); native void Native4(int[] ary) throws Exception; }
識別子ネイティブは、抽象を除く他のすべてのJava識別子と一緒に使用できます。
-
なぜネイティブメソッドを使用するのですか?
- Javaは非常に使いやすいですが、一部のレベルのタスクはJavaで実装するのが簡単ではありません。または、プログラムの効率が非常に心配な場合、問題が発生します。
- Java環境の外部と対話する
- 利点Javaアプリケーションは、Javaの外部の環境と対話する必要があります。これが、ネイティブメソッドが存在する主な理由です。Javaがオペレーティングシステムや特定のハードウェアなどの基盤となるシステムと情報を交換する必要がある状況について考えることができます。ネイティブメソッドは正式な通信メカニズムです。非常に簡潔なインターフェイスを提供し、Javaアプリケーションの面倒な詳細を理解する必要はありません。
- オペレーティングシステムとの対話:
- JVMは、Java言語自体とランタイムライブラリをサポートします。Javaプログラムが存在するプラットフォームです。インタプリタ(バイトコードを解釈する)と、ネイティブコードに接続されたいくつかのライブラリで構成されます。ただし、それは結局のところ完全なシステムではなく、多くの場合、いくつかの基盤となるシステムのサポートに依存しています。これらの基盤となるシステムは、多くの場合、強力なオペレーティングシステムです。これらのローカルメソッドを使用することで、Javaでのjreの基盤となる実装と対話することができ、JVMの一部でさえCで記述されています。また、Java言語自体がカプセル化を提供しないオペレーティングシステムの機能の一部を使用する場合は、ネイティブメソッドも使用する必要があります。
- サンのジャワ
- Cに実装されたSunインタープリター。これにより、外部との相互作用として通常のCのようになります。Jreは主にJavaで実装されており、いくつかのローカルメソッドを介して外部と相互作用します。例:クラスjava.lang.ThreadのsetPriority()メソッドはJavaで実装されていますが、クラスのローカルメソッドsetPriority0()を実装しています。このネイティブメソッドはCで実装され、JVM内に埋め込まれます。Windows95プラットフォームでは、このネイティブメソッドは最終的にWin32 setPriority()APIを呼び出します。これは、JVMによって直接提供されるローカルメソッドの特定の実装です。多くの場合、ローカルメソッドは外部ダイナミックリンクライブラリ(外部ダイナミックリンクライブラリ)によって提供され、JVMによって呼び出されます。
-
現状
- 現在、この方法は、 Javaプログラムを介してプリンタを決定したり、Javaシステムを介して生産設備を管理したりするなど、エンタープライズレベルのアプリケーションでは比較的まれなハードウェア関連のアプリケーションを除いて、ますます使用されていません。異種ドメインのキー通信が非常に発達しているため、例えば、ソケット通信が使用できる、Webサービスも使用できるなど、あまり紹介されていません。