JNI_CreateJavaVM 如何从命令行调用 运行 一个 java 应用程序

How is JNI_CreateJavaVM invoked when running a java app from the command line

我正在尝试了解 JVM 的切入点。经过研究,我了解到 JNI_CreateJavaVM(至少在 HotSpot JVM 中)是启动 JVM 时调用的方法。

我现在的问题是谁调用了 JNI_CreateJavaVM 方法?我试着查看 JDK 来源 JDK7 Hotspot。但不是很清楚,我找不到任何'int main'方法。

假设我创建了一个简单的 java 程序并将其编译为 Hello.java。现在,当我从命令行 运行 'java Hello' 时,到底发生了什么?第一个方法叫什么?

答案:@apangin 确实为我指出了正确的方向(见下面的评论)。主要方法位于此处 main method for java launcher。然后它从那里调用 JLI_launch,最终调用 JNI_CreateJavaVM 方法。

java(java.exe)是launcher——C写的小程序
The sources 在 JDK 存储库中,而不是 HotSpot。

Java launcher首先定位一个已安装的JRE,通过[=10=创建一个新的虚拟机],使用JNI搜索main方法,最后用JNI调用这个方法CallStaticVoidMethod函数。