我发现 ClassLoader 调用了一些 JVM 本地代码,所以我尝试从下面的 JVM 源代码中检查这些本地代码,例如我想检查方法 defineClass1 ,但是我发现我无法获取它们。 请问如何根据Java代码调用的native代码找到相关的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);
最佳答案
上述方法的 JNI 实现在 JDK 存储库中,不在 HotSpot 中,参见 src/share/native/java/lang/ClassLoader.c
但是这些方法最终都是通过HotSpot-specific回调到JVM
JVM_DefineClassWithSource
API。此 JVM 功能的实现在 HotSpot 存储库中,请参阅 src/share/vm/prims/jvm.cpp
关于java - 如何从JVM源码中找到native方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40217559/