Java虚拟机启动时间由哪些部分组成?

7
有时我听到人们讨论Java的启动时间。它似乎是一个重要的性能方面,但它真正是什么呢?
它由什么组成? 1.由动态类加载引起的类加载时间? 2.或者是编译器在编译时产生的首次编译开销? 3.或者是在Java程序执行的开始阶段导致“缓慢”的其他原因?
其次,第二个问题是: 如何测量Java程序的启动时间?从哪个点到哪个点被称为启动时间的持续时间?
我不知道我的问题是否表达正确,如果不正确,请告诉我。谢谢!

我一直听说这个术语是非正式地使用的,我很好奇是否有人已经确定了它的正式定义。 - templatetypedef
2个回答

1

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

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

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

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

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

这两个方面取决于您所讨论的应用程序类型以及您认为应用程序启动阶段的考虑因素。


1

正如Stephen C所提到的,"启动时间"没有一个通用的正式定义。

为了直观地理解这个概念,我在Oracle的网站上找到了一些描述。

基本上,它给出了一个非正式的定义。"应用程序的启动时间是指应用程序启动并准备好开始执行其预期任务所需的时间。" JVM和应用程序本身都会影响启动时间。

此外,它提供了一些想法(调整堆大小-Xms/-Xmx)来减少启动时间。无论堆大小过大还是过小,都会延长启动时间。

此外, "诊断缓慢的JVM启动" 提供了一些线索,以找到缓慢启动的原因。

请注意,以上内容都是在JRockit JVM的背景下,但这些想法更具有普遍性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接