如何衡量JVM启动时间? [英] How do I measure JVM startup time?
问题描述
我有一个用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屋!