我发现ClassLoader调用了一些JVM本机代码,所以我尝试从下面的JVM源代码中检查这些本机代码,例如我想检查方法defineClass1,但是我发现我没有得到它们。 请问如何根据从Java代码调用的本机代码找到相关的JVM源代码?
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 :(得分:3)
上述方法的JNI实现在JDK存储库中,而不在HotSpot中,请参阅src/share/native/java/lang/ClassLoader.c
但是,这些方法最终会通过特定于HotSpot的方式回调JVM
JVM_DefineClassWithSource
API。此JVM函数的实现位于HotSpot存储库中,请参阅src/share/vm/prims/jvm.cpp