blog

JVM-ランタイムデータ領域-ローカルメソッドインタフェース

簡単に言えば、ネイティブメソッドとは、Javaの非Javaコードインターフェイスを呼び出すもので、ネイティブメソッドとはそのようなJavaメソッドのことです。エクスター......

Dec 7, 2020 · 3 min. read
シェア

理論

簡単に言うと、ネイティブ・メソッドとは、JavaがJava以外のコードを呼び出すためのインターフェースです。ネイティブ・メソッドとは、Javaのメソッドの基礎となる実装が、C言語などのJava以外の言語で実装されているものです。extern "C "を使って、C++コンパイラにC関数を呼び出すように指示できます。

ネイティブ・メソッドを定義する場合、その実装はJava以外の言語で実装されているため、提供されません。

ネイティブ・インターフェイスの役割は、異なるプログラミング言語をjava用に統合することです。

nativeという識別子は、abstract以外のすべてのjava識別子と連結することができます。

/**
 * ローカルメソッド
 */
public class IHaveNatives {
 //abstract メソッド本体なし
 public abstract void abstractMethod(int x);
 //native と抽象は共存できない、ネイティブは本体のメソッドであり、C言語によって実装する。
 public native void Native1(int x);
 native static public long Native2();
 native synchronized private float Native3(Object o);
 native void Native4(int[] array) throws Exception;
}

ネイティブメソッドを使用する理由

javaは非常に使いやすいのですが、javaでは実装が容易でないレベルの作業もありますし、プログラムの効率が懸念される場合には問題が生じます。

  • javaの外部環境との対話:

    javaアプリケーションがjavaの外の環境とやりとりする必要がある場合があります。 javaが、消しゴムシステムやハードウェアのような基盤となるシステムと情報を交換する必要がある状況を考えてみてください。ネイティブ・メソッドは、このような通信メカニズムを形式的に提供します。ネイティブ・メソッドは非常にシンプルなインターフェースを提供し、面倒な.NETの詳細を理解するためにJavaアプリケーションの外に出る必要はありません。
  • オペレーティング・システムとの相互作用(例えば、スレッドがオペレーティング・システムのスレッドに戻ってしまうなど)

    JVMはJava言語そのものとランタイム・ライブラリをサポートし、Javaプログラムが構築されるプラットフォームであり、インタプリタとネイティブ・コードにリンクする多数のライブラリで構成されています。しかし、いずれにせよ、それは完全なシステムではなく、多くの場合、基盤となるシステムのサポートに依存しています。これらの基礎となるシステムは、多くの場合、強力なオペレーティング・システムです。ネイティブメソッドを使用することで、javaでjreを実装して基盤となるシステムとやりとりすることが可能になり、jvmの一部でさえCで書かれています。また、java言語自体がカプセル化を提供していないオペレーティング・システムの機能を使いたい場合も、ネイティブ・メソッドを使う必要があります。
  • サンのJava

    SunのインタプリタはC言語で実装されており、通常のC言語のように外の世界とやりとりすることができます。jreはほとんどJavaで実装されており、いくつかのネイティブメソッドを通じて外の世界ともやりとりします。例えば、クラスjava.lang.ThreadのsetPriority()メソッドはJavaで実装されていますが、クラスが提供するローカル・メソッドsetPriority0への呼び出しを実装しています。

現状

現在、このメソッドが使用されることが少なく、ハードウェアアプリケーションに関連する場合を除き、javaプログラムドライブプリンタやjavaシステム管理生産設備を介してなど、企業のアプリケーションでは、比較的まれされています。というのも、今非常に発展した異種間通信の分野、例えばソケット通信の使用は、また、Webサービスなどで使用することができ、より多くの導入を行うことはありません。

Read next

なぜラムダ式を使うのか?

ラムダ式を使用する目的 ラムダ式 "とは、1回または複数回実行することができる、受け渡し可能なコードの一部です。構文を学ぶために、Javaでいつも使われている似たようなコードブロックを復習してみましょう。私が

Dec 7, 2020 · 7 min read