私はhere からJVMの内部を読んで、用語「ネイティブポインタ」に出くわし、それが何を意味し、それはJNIとは何かを持っているんでしたか?その上のテキストでネイティブポインタとreturnAddressは何ですか?
は、プログラムカウンタを語ると言う:
実行中のプログラムの各スレッドは、スレッドが開始されたときに作成された独自のPCレジスタ、またはプログラムカウンタを、持っています。 pcレジスタは1ワードのサイズなので、ネイティブポインタとreturnAddressの両方を保持できます。スレッドがJavaメソッドを実行すると、pcレジスタにはスレッドが実行中の現在の命令のアドレスが格納されます。 「アドレス」は、ネイティブポインタまたはメソッドのバイトコードの先頭からのオフセットである可能性があります。スレッドがネイティブメソッドを実行している場合、pcレジスタの値は未定義です。
returnAddressはいずれの参照アドレスでもわかります。次のようになります。 Object o = new Object();
ここでo
は、ヒープで作成されたオブジェクトのアドレスを返します。私の理解は正しいのですか?
両方を説明する例はどれも素晴らしいでしょう。ここ
「ネイティブ命令」とはどういう意味ですか?また、公式文書でもこれについて説明しています。https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.1 – rd22
@ rd22ネイティブ命令は、マシン・コード命令ですコードが実際に実行されているネイティブCPUの –
この文書とあなたがコメントで引用したものは、JNIとは何の関係もありません。彼らは両方とも、バイトコード命令を参照するJVMによって維持される*ソフトウェア* PCレジスタについて話しています。これは、バイトコード命令(「ネイティブポインタ」、用語の貧弱な選択)を直接指し示すことも、現在のメソッドの開始点からオフセットすることもできます。 – EJP