如何在 OpenJDK JVM (Hotspot) 代码中找出包含 main() 方法的 class?

How can I find out the class containing the main() method inside the OpenJDK JVM (Hotspot) code?

thread.cpp 中定义了方法 Threads::create_vm,它初始化 主线程 VM 线程 。当我找到这个代码位置时,我想知道 主线程 如何知道要执行哪个 Java main() 方法,即 class 去寻找,但我找不到。

在虚拟机创建之后(甚至之前),我想尽快获取包含主要方法(和作为第一步,只需 printf 它)。我想查看 主线程 的堆栈帧中的最底部条目,但堆栈帧在 Threads::create_vm 期间尚不存在。有人可以帮我指明正确的方向吗?

tl;dr: 我想修改 OpenJDK 源代码以打印包含 Java class 的 class 名称=13=]方法,这个怎么做?

创建VM的时候,不知道class/method里面会执行什么。这是一份 launcher to invoke main Java method using one of JNI functions 的工作。顺便说一句,这个方法不一定需要调用 main.

I want to modify the OpenJDK source to print the class name of the class containing the Java main() method, how to do this?

您可能想修改 Java 启动器。参见 java.c