当前位置: 首页 > 知识库问答 >
问题:

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

况弘新
2023-03-14

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

我正在研究一些核心文件分析的自动化,理解JVM启动的类会很有帮助,即使在创建核心文件时没有线程在该类下运行代码。

问题:JVM(特别是Oracle和OpenJDK)是否跟踪调用主方法的类?

共有1个答案

吉毅
2023-03-14

jinfo实用工具(包含在OpenJDK和Oracle JDK中)可以告诉主类。它既适用于实时JVM,也适用于核心转储。

例如。下面是如何从核心转储中找到Java命令行:

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

从JDK9开始,jinfo只适用于活动进程,而jhsdb jinfo适用于核心转储。

 类似资料:
  • 问题内容: 如果JVM有机会在更多对象分配请求出现之前运行GC,那么JVM是否可以从OutOfMemoryError中恢复而无需重新启动? 各种JVM实现在这方面是否有所不同? 我的问题是关于JVM恢复,而不是用户程序试图通过捕获错误进行恢复。换句话说,如果将OOME抛出到应用程序服务器(jboss / websphere / ..)中,我是否必须重新启动它?或者,如果其他请求似乎没有问题,我可以

  • 问题内容: 我的应用程序主要是Java,但对于某些计算,使用的是C ++库。我们的环境是在RedHat 3(即将成为RedHat 5)上运行的Java 1.6。 我的问题是C 库不是线程安全的。为解决此问题,我们运行了多个单线程“工作者”进程,并由中央工作管理器(也用C 编写)为它们提供工作。我们的Java应用程序通过第三方产品调用C ++工作管理器。 由于各种原因,我们想重新编写C Work M

  • 我设法使用exe模式启动了一个自定义运行时映像,并使用jvm模式启动了一个传统的Java程序(类路径+普通JDK),但我无法使用jvm模式(它不会启动新进程)来启动映像。 prunsrv有一个“jvmoptions9”参数,这可能暗示这个场景可能被支持,但我不确定。

  • 问题内容: 情况是这样的,我的macbook pro有两个网络接口。一个是静态定义的以太网接口,另一个是DHCP配置的无线接口。 我试图弄清楚如何配置特定的Java项目以仅使用我的静态有线接口,而不是简单地通过JVM或IDEA(IntelliJ 8)选择列表中的第一个接口。 我设法通过一个vmware实例实现了这一目标,在该实例中,我的虚拟环境仅靠有线接口提供,但这会带来广告性能问题,并且只是在W

  • 背景:我正在对通过几层间接启动的Java应用程序进行一些性能测试,因此我不完全确定该应用程序是否以我认为的标志启动。我希望我的应用程序包括一个健全性检查(在开始其性能测试之前)并在结果(测试之后)中包含有关如何调整JVM的信息,例如: 使用了哪个垃圾收集器 Java代码是否有办法(在运行的JVM中)查询用于包含JVM的实际选项?(假设我看不到启动我的命令行,因此我无法重新解析这些标志。) 如果没有

  • 我的文件夹是26 GB。 直接删除所有内容安全吗?那些文件会自动重新生成吗?