如何衡量JVM启动时间? [英] How do I measure JVM startup time?

查看:161
本文介绍了如何衡量JVM启动时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用java编写的应用程序,我想知道在到达 static void int main(String args)之前花了多少时间以及它在那做了什么阶段我该如何实现呢?

I have an application written in java and I want to know how much time it takes before reaching static void int main(String args) and what it is doing at that stage how can I achieve that?

我知道微软有一个名为MPGO的工具(经理人资料引导优化)是否有与Java等效的工具?

I am aware that microsoft have a tool called MPGO (Manager profile guided optimisation) is there an equivalent for Java?

推荐答案

从Java应用程序内部测量启动时间的简单方法:

A simple way to measure start-up time from inside Java application:

import java.lang.management.ManagementFactory;

public class Test {

    public static void main(String[] args) {
        long currentTime = System.currentTimeMillis();
        long vmStartTime = ManagementFactory.getRuntimeMXBean().getStartTime();
        System.out.println(currentTime - vmStartTime);
    }
}

您可以使用JVMTI代理,用于跟踪类加载,垃圾收集,方法编译等VM事件。这是一个简单的代理我已制作 - vmtrace (以及 Windows编译后的dll

You may use JVMTI agent for tracing VM events like class loading, garbage collection, method compilation etc. Here is a simple agent I've made - vmtrace (and the compiled dll for Windows).

运行 java -agentpath:path \ to \\ \\ vmtrace.dll Main ,事件跟踪将打印到 stderr

Run java -agentpath:path\to\vmtrace.dll Main, and the event trace will be printed to stderr:

[0.00000] VMTrace started
[0.00182] Dynamic code generated: flush_icache_stub
[0.00187] Dynamic code generated: get_cpu_info_stub
[0.00519] Dynamic code generated: getCPUIDNameInfo_stub
[0.00524] Dynamic code generated: forward exception
[0.00526] Dynamic code generated: call_stub
...
[0.01182] Loading class: java/lang/Object
[0.01198] Loading class: java/lang/String
[0.01206] Loading class: java/io/Serializable
...
[0.05620] VM initialized
[0.05664] Class prepared: java/lang/invoke/MethodHandle
[0.05672] Loading class: java/lang/invoke/MethodHandleImpl
[0.05732] Class prepared: java/lang/invoke/MethodHandleImpl
[0.05738] Loading class: java/lang/invoke/MethodHandleImpl$1
[0.05743] Class prepared: java/lang/invoke/MethodHandleImpl$1
[0.05755] Loading class: java/lang/invoke/MethodHandleImpl$2
[0.05759] Loading class: java/util/function/Function
[0.05768] Class prepared: java/util/function/Function
...

这篇关于如何衡量JVM启动时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆