You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从二进制堆转储中提取JVM运行时长或启动时间?

获取堆转储中的JVM运行时长/启动时间

我之前也碰到过一模一样的需求,分享几个在Eclipse Memory Analyzer(MAT)里亲测有效的方法:

方法一:通过系统属性java.vm.startup.time提取

JVM本身会把启动时间戳(毫秒级,从1970-01-01 UTC算起)存在系统属性java.vm.startup.time里,用MAT的OQL查询就能直接拿到:

  1. 加载堆转储后,点击顶部工具栏的OQL按钮打开查询窗口
  2. 输入以下查询语句:
SELECT prop.value.toString() FROM java.util.Properties$Entry prop WHERE prop.key.toString() = "java.vm.startup.time"
  1. 执行查询后,就能得到JVM启动的时间戳
  2. 切换到MAT的Overview页面,找到「Snapshot Information」里的「Time」字段(这是堆转储生成的时间),用这个时间减去启动时间戳,就能算出JVM的运行时长

方法二:查看RuntimeMXBean实例的startTime字段

JVM的RuntimeMXBean实现类(通常是java.lang.management.RuntimeMXBeanImpl)会直接存储启动时间:

  1. 打开MAT的Histogram视图,在搜索框输入RuntimeMXBeanImpl
  2. 右键点击该类,选择「List Objects > With incoming references」
  3. 在弹出的实例列表里,查看实例的startTime字段,这个就是启动时间戳
  4. 同样用堆转储生成时间减去这个值,就能得到运行时长

方法三:旧版JDK的备选方案(比如OpenJDK 8)

在部分旧版JDK中,sun.misc.VM类的bootTime静态字段也存了启动时间戳:

  1. 在MAT的Class Browser里找到sun.misc.VM类
  2. 查看它的静态字段bootTime,直接获取时间戳即可

注意:这个方法兼容性较差,高版本JDK大多已经移除了这个类或字段,优先用前两种方法更稳妥。

内容的提问来源于stack exchange,提问作者turbanoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:57:26