現在のJNIのドキュメントには、古いインターフェースに関する次の興味深い情報が含まれています。
JDK 1.0には、ネイティブメソッドインターフェイスが付属しています。残念ながら、このインターフェースが他のJavaVMでの採用に適さなかった主な理由は2つあります。
まず、ネイティブコードは、C構造体のメンバーとしてJavaオブジェクトのフィールドにアクセスしました。ただし、Java言語仕様では、オブジェクトがメモリ内にどのように配置されるかは定義されていません。Java VMがオブジェクトをメモリ内で異なる方法でレイアウトする場合、プログラマーはネイティブメソッドライブラリを再コンパイルする必要があります。
..。
これは、ネイティブコードが、APIを経由せずに、メモリ内のオブジェクトの値に直接アクセスできることを意味します。これは、ゲッター/セッターを使用するのではなく、Javaのフィールドに直接アクセスするのと同じです。つまり、フィールドの基になるレイアウトは、その古いネイティブインターフェイスを使用するコードとの互換性を損なうことなく変更することはできません。
JDK1.0.2のネイティブメソッドチュートリアルのコピーをここで見つけました。ネイティブコードからのJavaオブジェクトの処理に関するセクションが含まれています。
最新のJNIは、メソッド呼び出しを介してのみJavaオブジェクトフィールドへのアクセスを提供します。このようにして、オブジェクトのレイアウトや他の多くのものを、互換性を損なうことなく変更できます。