Lorsqu'une méthode définie en C est appelée à partir de Java (en utilisant JNI), quelles sont les méthodes appelées dans la JVM? À quoi ressemble le flux d'exécution?Fonctions JVM appelées en interne sur JNI
- En d'autres termes, considérons une méthode
public native void display()
. Lorsque cette méthode est appelée à partir du code Java sous la formeobject.display()
, quelles sont les méthodes JVM internes appelées en cours d'exécution vers le code natif? - Où puis-je trouver plus de documentation à ce sujet? Sinon, quelle fonction JVM dans la source puis-je regarder et tracer?
Pour appeler une méthode native, machine virtuelle Java HotSpot entre un talon d'exécution (le fragment de code machine généré au démarrage VM) . Ce bout d'exécution exécute toutes les tâches JNI requises - la procédure est décrite [ici] (https://stackoverflow.com/a/24747484/3448419). – apangin
Les sources d'appel des méthodes natives à partir de l'interpréteur sont dans ['InterpreterGenerator :: generate_native_entry'] (http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/4d9931ebf861/src/cpu/x86/vm/ templateInterpreter_x86_64.cpp # l960), ou ['SharedRuntime :: generate_native_wrapper'] (http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/4d9931ebf861/src/cpu/x86/vm/sharedRuntime_x86_64.cpp # l1723) pour appeler des méthodes natives à partir du code compilé par JIT. – apangin
Ce qui précède est vrai pour la JVM HotSpot. D'autres JVM peuvent le faire différemment. – apangin