Spring 启动应用程序 - "mvn spring-boot:run"和"java -jar"启动时间的差异



我注意到当从Maven和as jar开始时,Spring Boot应用程序的启动时间有很大的不同。例如:

  • mvn spring-boot:run - 5 秒
  • java -jar myapp.jar - 25 秒

启动 jar 文件需要大约 5 倍的时间。为什么会这样?使用 Maven 和 jar 启动应用程序时,后台发生了什么?加载方式不同吗?是否可以在Maven使用的时间内启动jar文件?

这种差异可能是由于spring-boot:run实际上是在Maven JVM中运行Spring Boot应用程序(除非您显式设置fork参数),当它在Maven JVM中运行时,它实际上是作为新线程而不是进程运行的。创建线程比进程快得多。

但是java -jar命令将创建一个操作系统进程,进程创建具有附加的步骤,例如请求进程ID,分配内存等。最重要的是,需要提取myapp.jar,JVM不会有任何优化,因为它将首次读取从jar文件中提取的.class。基本上是冷启动,需要时间。

你可以在这里看到Maven Spring Boot Plugin的源代码

最新更新