启动时间在Java虚拟机中构成了什么?

Jac*_*kWM 7 java profiling jit jvm startup

有时我听到人们讨论Java的启动时间.这似乎是一个重要的性能方面.但究竟是什么呢?

  • 它由什么组成?
    1. 动态类加载引起的类加载时间?
    2. 或者只编译JVM的第一次编译开销?
    3. 或者在Java程序执行的开始阶段导致"缓慢"的其他因素?

然后,第二个问题是

  • 如何衡量Java程序的启动时间?从哪一点到哪个点的持续时间称为启动时间?

我不知道我的问题是否以正确的方式提出; 如果没有,请告诉我.谢谢!

Ste*_*n C 1

启动时间没有正式定义。事实上,实际 IT 中使用的大多数术语都没有正式定义。(或者忽略正式定义。)

但粗略地说,它是从应用程序启动到准备好执行某些有用操作的时间。启动期间发生的事情取决于应用程序,但它包括静态类加载、静态类初始化和(可能)某些类的 JIT 编译。其他事情可能包括启动 UI、连接到数据库、预加载特定于应用程序的数据结构、应用程序“连接”等。

尝试正式定义“启动时间”的问题在于,任何定义都可能不适用于应用程序类型的某些重要子集。即使您可以定义它,也存在一个复杂的问题:在应用程序宣布自己“准备就绪”后,某些启动(或预热)任务可能会继续在后台发生。

(这不是 Java 特有的问题。考虑笔记本电脑的“启动”;即从打开电源到桌面完全可用之间发生的情况。)

如何衡量Java程序的启动时间?从哪一点到哪一点的持续时间称为启动时间?

这两者都由您决定,具体取决于您所讨论的应用程序类型以及希望将什么视为应用程序的启动阶段。