【问题标题】:How can I find out the class containing the main() method inside the OpenJDK JVM (Hotspot) code?如何在 OpenJDK JVM(热点)代码中找出包含 main() 方法的类?
【发布时间】:2018-02-22 16:04:54
【问题描述】:

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

在VM创建之后(甚至之前),我想尽快获取包含main方法的类的类名(及其包)(第一步,只需printf它)。我曾考虑查看主线程堆栈框架中最底部的条目,但在Threads::create_vm 期间堆栈框架尚不存在。有人可以帮我指出正确的方向吗?

tl;dr:我想修改OpenJDK源码来打印包含Javamain()方法的类的类名,怎么做?

【问题讨论】:

    标签: java jvm openjdk jvm-hotspot


    【解决方案1】:

    创建 VM 时,它不知道将在其中执行什么类/方法。使用JNI functions 之一调用主要Java 方法是launcher 的工作。 BTW,这个方法不一定需要调用main

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

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

    【讨论】:

    • 为什么用 C 编写的启动器或者这是源代码 JVM?
    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多