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);
}
}
4条答案
按热度按时间cunj1qz11#
从Java应用程序内部测量启动时间一种简单方法:
您可以使用JVMTI agent来跟踪VM事件,如类加载、垃圾收集、方法编译等。下面是我制作的一个简单的代理-vmtrace(以及Windows的compiled dll)。
运行
java -agentpath:path\to\vmtrace.dll Main
,事件跟踪将输出到stderr
:envsm3lx2#
使用java 9,你可以将
-Xlog:class+init=info:file=trace.log
添加到跟踪类初始化中(这是类加载后的下一步),然后过滤你的主类。您也可以让它记录所有事件,以查看启动前发生了什么,但记录的事件数量可能会扭曲结果。
在java 8和更低版本中,不同的VM组件有自己的日志记录(通常只是通过printf),类加载是不包括时间戳的。
aoyhnmkz3#
测量启动时间的另一种方法是使用ProcessHandle,该方法自Java 9起可用:
tcomlyy64#
如果您使用jrockit jvm,则可以添加以下标志以了解jvm启动的计时。
更多详细信息,请访问https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/slow_start.html#wp1083972
2016年5月9日更新
jstat将提供关于类加载器的基于时间的统计信息。
使用此id可以执行以下操作
这将在10秒内每秒提供一个类加载器的快照。