用于启动JVM的主要方法是否可以从核心文件中确定?

时间:2018-04-10 18:41:05

标签: java jvm

在启动时,JVM查找用户指定的类并使用签名“public static void main(String [])”运行其中包含的方法。

当JVM继续运行main方法产生的其他线程时,执行main方法的线程显然可以终止。因此,提取Java堆栈跟踪(例如“jstack”输出)不足以找出启动JVM的初始类。我也不知道JDK中通常包含的其他命令,这些命令将从正在运行的JVM或核心文件中提取该信息。

我正在开发一些用于分析核心文件的自动化,理解从中启动JVM的类将会很有帮助,即使在创建核心文件时没有线程在该类下运行代码也是如此

问题:一般JVM(以及Oracle和OpenJDK)是否跟踪调用main方法的类?

1 个答案:

答案 0 :(得分:2)

enter image description here实用程序(包含在OpenJDK和Oracle JDK中)可以告诉主类。它适用于实时JVM和核心转储。

E.g。以下是如何从核心转储中找到Java命令行:

jinfo /path/to/java core.1234 | grep sun.java.command

从JDK 9开始jinfo仅适用于实时进程,而jhsdb jinfo适用于核心转储。