一种从Java应用程序内部测量启动时间的简单方法:
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)。
运行
java -agentpath:pathtovmtrace.dll Main,事件跟踪将打印到
stderr:
[0.00000] VMTrace started[0.00182] Dynamic pre generated: flush_icache_stub[0.00187] Dynamic pre generated: get_cpu_info_stub[0.00519] Dynamic pre generated: getCPUIDNameInfo_stub[0.00524] Dynamic pre generated: forward exception[0.00526] Dynamic pre 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...



