2

IBM Linkから:

JDK 1.0リリースには、ネイティブコードとJavaコードを明確に分離できない以前のネイティブメソッドインターフェイスが含まれていました。このインターフェースでは、ネイティブはJVM構造に直接到達するため、JVM実装、プラットフォーム、またはJDKのバージョン間でさえ移植できませんでした。JDK 1.0モデルを使用してかなりの数のネイティブを含むアプリケーションをアップグレードすることは、複数のJVM実装で実行できるネイティブを開発することと同様に費用がかかりました。

ネイティブとは、JVM構造に直接到達するため、JVM実装間で移植できないという意味ですか?わかりません。

4

1 に答える 1

5

現在のJNIのドキュメントには、古いインターフェースに関する次の興味深い情報が含まれています。

JDK 1.0には、ネイティブメソッドインターフェイスが付属しています。残念ながら、このインターフェースが他のJavaVMでの採用に適さなかった主な理由は2つあります。

まず、ネイティブコードは、C構造体のメンバーとしてJavaオブジェクトのフィールドにアクセスしました。ただし、Java言語仕様では、オブジェクトがメモリ内にどのように配置されるかは定義されていません。Java VMがオブジェクトをメモリ内で異なる方法でレイアウトする場合、プログラマーはネイティブメソッドライブラリを再コンパイルする必要があります。

..。

これは、ネイティブコードが、APIを経由せずに、メモリ内のオブジェクトの値に直接アクセスできることを意味します。これは、ゲッター/セッターを使用するのではなく、Javaのフィールドに直接アクセスするのと同じです。つまり、フィールドの基になるレイアウトは、その古いネイティブインターフェイスを使用するコードとの互換性を損なうことなく変更することはできません。

JDK1.0.2のネイティブメソッドチュートリアルのコピーをここで見つけました。ネイティブコードからのJavaオブジェクトの処理に関するセクションが含まれています。

最新のJNIは、メソッド呼び出しを介してのみJavaオブジェクトフィールドへのアクセスを提供します。このようにして、オブジェクトのレイアウトや他の多くのものを、互換性を損なうことなく変更できます。

于 2012-05-16T05:59:27.627 に答える