3

この場所のJNI 仕様には、次の注記があります。

ノート

JDK/JRE 1.1 では、プログラマは Get/ReleaseArrayElements 関数を使用してプリミティブ配列要素へのポインタを取得できます。VM がピニングをサポートしている場合、元のデータへのポインターが返されます。それ以外の場合は、コピーが作成されます。

JDK/JRE 1.3 で導入された新しい関数により、VM がピニングをサポートしていない場合でも、ネイティブ コードは配列要素への直接ポインターを取得できます。

2 番目の文は不可解です。これを行うメソッドが見つからないからです。すべての配列アクセス関数は、GetPrimitiveArrayCritical() を含め、コピーを作成する可能性があります。より読みやすいバージョンの仕様である「The Java™ Native Interface: Programmer's Guide and Specification」は、JDK 1.3 がリリースされる前の 1999 年に発行されたため、ここでは役に立ちません。そして、私が知る限り、1.3 では JNI メソッドはまったく追加されませんでした。仕様で文字列「1.3」を検索すると、この 1 つの使用しか見つかりません。

このメモが何を指しているのか、誰か分かりますか?

4

1 に答える 1

1

コピーを作成せずに、JNI を介して Java 配列を C に渡す方法はありますか? を参照してください。. その答えは、新しい関数がGetPrimitiveArrayCritical()であるということです。no-copy を保証するものではありませんが、適切なアクセスを提供するために固定する必要はありません。

リンクされた質問へのコメントも関連しています: DirectBuffer は、任意の VM でインプレース アクセスを提供することが保証されています。

于 2013-09-14T20:33:43.287 に答える