2016-10-24 3 views
0

Ich fand den ClassLoader aufrufen einige JVM nativen Code, also habe ich versucht, diese nativen Code aus dem JVM-Quellcode unten zu überprüfen, zum Beispiel möchte ich die Methode defineClass1 überprüfen, aber ich finde ich konnte sie nicht erhalten. Kann ich den zugehörigen JVM-Quellcode basierend auf dem nativen Code finden, der vom Java-Code aufgerufen wird?Wie finde ich die native Methode aus dem JVM-Quellcode?

http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/log?rev=defineClass1

private native Class defineClass0(String name, byte[] b, int off, int len, 
            ProtectionDomain pd); 

private native Class defineClass1(String name, byte[] b, int off, int len, 
            ProtectionDomain pd, String source); 

private native Class defineClass2(String name, java.nio.ByteBuffer b, 
            int off, int len, ProtectionDomain pd, 
            String source); 
+0

Es kann mehrere Versionen geben, d. H. Pro Plattform. Laden Sie einfach ein Text-Such-Tool herunter und starten Sie es. Wenn man nachdenkt, dass die Methoden in den Commit-Protokollen sehr wahrscheinlich fehlschlagen, würde ich nicht erwarten, dass sie diese Art von Informationen enthalten. - Ich möchte Sie jedoch fragen: Was wollen Sie tun? Warum interessieren Sie sich für den systemeigenen Code? – Thomas

+0

@Thomas, ich möchte die JVM studieren. – Jason

Antwort

1

JNI Implementierung der oben genannten Methoden ist in JDK-Repository, nicht in HotSpot finden src/share/native/java/lang/ClassLoader.c

jedoch schließlich diese Methoden zu JVM Rückruf durch HotSpot-spezifische JVM_DefineClassWithSource API. Die Implementierung dieser JVM-Funktion ist im HotSpot-Repository, siehe src/share/vm/prims/jvm.cpp

+0

das ist genau das, was ich brauche Antwort, vielen Dank. – Jason

Verwandte Themen