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

时间:2012-06-15 00:58:39

标签: java jvm profiling startup jit

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

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

然后,第二个问题是

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

(这不是Java特有的问题。考虑笔记本电脑的“启动”;即在启动电源和桌面完全可用之间会发生什么。)

  

如何衡量Java程序的启动时间?从哪个点开始称为启动时间?

根据您所讨论的应用程序类型以及想要考虑作为应用程序启动阶段的内容,这些都由您决定。

答案 1 :(得分:1)

正如Stephen C所提到的,“启动时间”没有一般的正式定义。

为了直观地理解这个概念,我在Oracle's webs找到了一些描述。

基本上,它给出了一个非正式的定义。 “应用程序的启动时间是应用程序启动并运行并准备开始执行它应该执行的操作所需的时间。”JVM和应用程序本身都会影响启动时间。

此外,它提供了一些想法(调整堆大小 -Xms / -Xmx )以减少启动时间。堆大小太大或太小都会延长启动时间。

此外,“Diagnosing a Slow JVM Startup”显示了一些线索,可以找到启动缓慢的原因。

注意以上所有内容都在JRockit JVM的上下文中,但这些想法更为通用。