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

时间:2018-02-22 16:04:55

标签: java jvm openjdk jvm-hotspot

thread.cpp中,定义了Threads::create_vm方法,用于初始化主线程 VM线程。虽然我找到了这个代码位置,但我想知道主线程如何知道要执行哪个Java main()方法,即要查找哪个类,但我找不到那个。

创建VM之后(甚至之前),我想尽快获取包含main方法的类的类名(及其包)(作为第一步,只需{{1}它)。我考虑过查看主线程的堆栈帧中最底部的条目,但在printf期间堆栈帧还不存在。有人能帮助我指出正确的方向吗?

tl; dr:我想修改OpenJDK源来打印包含Java Threads::create_vm方法的类的类名,该怎么做?

1 个答案:

答案 0 :(得分:1)

创建VM时,它不知道将在其中执行哪个类/方法。使用launcher之一调用主Java方法是JNI functions的工作。顺便说一句,这种方法不一定需要被称为main

  

我想修改OpenJDK源来打印的类名   包含Java main()方法的类,该怎么做?

您可能想要修改Java启动器。请参阅java.c