0
Cで定義されたメソッドがJavaから呼び出されるとき(JNIを使用)、JVM内で呼び出されるメソッドは何ですか?実行フローはどのように見えますか?JNIでJVM関数と呼ばれる内部で
- つまり、方法を検討してください
public native void display()
。このメソッドをjavaコードからobject.display()
という名前で呼び出すと、ネイティブコードの実行が進むにつれて呼び出される内部JVMメソッドは何ですか? - これに関する詳細はどこにありますか?あるいは、ソースのどのJVM機能を見たりトレースしたりすることができますか?
がネイティブメソッドを呼び出すには、HotSpotのJVMランタイムスタブ(VMの起動時に生成されたマシンコードのフラグメント)に入り、 。このランタイムスタブは、必要なJNIのすべての処理を行います。手順は[ここ](https://stackoverflow.com/a/24747484/3448419)で説明しています。 – apangin
インタプリタからネイティブメソッドを呼び出すソースは、['InterpreterGenerator :: generate_native_entry'](http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/4d9931ebf861/src/cpu/x86/vm/)にあります。 templateInterpreter_x86_64.cpp#l960)、または['SharedRuntime :: generate_native_wrapper'](http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/4d9931ebf861/src/cpu/x86/vm/sharedRuntime_x86_64.cpp #l1723)JITコンパイルされたコードからネイティブメソッドを呼び出すためのものです。 – apangin
上記はHotSpot JVMに当てはまります。他のJVMはこれを別々に行うかもしれません。 – apangin