Java虚拟机的启动时间由什么组成?

Java虚拟机的启动时间由什么组成?,java,jvm,profiling,startup,jit,Java,Jvm,Profiling,Startup,Jit,有时我听到人们讨论Java的启动时间。这似乎是一个重要的性能方面。但它到底是什么 它由什么组成? 动态类加载导致的类加载时间 还是仅编译JVM中的首次编译开销 或者在Java程序执行的开始阶段导致“缓慢”的其他原因 那么第二个问题是, 如何测量Java程序的启动时间?从哪一点到哪一点的持续时间称为启动时间 我不知道我的问题问得对不对;如果没有,请告诉我。谢谢 启动时间没有正式定义。事实上,实际IT中使用的大多数术语都没有正式定义。(或忽略形式定义。) 但粗略地说,这是从应用程序启动到准

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

  • 它由什么组成?
  • 动态类加载导致的类加载时间
  • 还是仅编译JVM中的首次编译开销
  • 或者在Java程序执行的开始阶段导致“缓慢”的其他原因
那么第二个问题是,

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

我不知道我的问题问得对不对;如果没有,请告诉我。谢谢

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

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

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

(这不是java特有的问题。考虑一下笔记本电脑的“启动”;即在它启动时,桌面和桌面完全可用。 如何测量Java程序的启动时间?从哪一点到哪一点的持续时间称为启动时间


这两种情况都取决于你所讨论的应用程序,以及“强”> 你想把你的应用视为启动阶段。

< P>正如史蒂芬C所提到的,“启动时间”没有一般的正式定义。 为了对这个概念有一个直观的理解,我在上面找到了一些描述

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

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

此外,“”显示了一些线索,以找到启动缓慢的原因


请注意,以上内容都是在JRockit JVM的上下文中,但其思想更为笼统。

我总是听到非正式地提到这个术语,我很好奇是否有人已经为它下了正式的定义。