开发模式与生产应用程序的不同之处
本文档解释了 Quarkus 中的 dev 模式与生产应用程序的区别。
架构差异
除了功能集,在 dev 模式下运行的 Quarkus 应用程序在架构上与生产应用程序(即使用 java -jar …
运行的应用程序)不同。
在 dev 模式下,Quarkus 使用类加载器层次结构(此处有详细解释),该层次结构支持用户代码的实时重新加载,而无需重新构建和重启应用程序。
在生产应用程序中,上述类加载器基础结构完全不存在 - 只有一个专门构建的类加载器,用于加载(几乎)所有类和依赖项。
Dev 模式功能
为了实现“开发者愉悦”的宗旨,Quarkus 在启用 dev 模式时提供了许多功能。最重要的功能是
Dev UI
Quarkus 提供了一个非常实用的 UI,可以通过浏览器访问 /q/dev-ui
。这个 UI 允许开发者查看应用程序的状态,还可以访问各种可以更改该状态的操作(取决于存在的扩展)。此类操作的示例包括
-
更改配置值
-
运行数据库迁移脚本
-
清除缓存
-
运行计划任务
-
构建容器
数据库导入脚本
当 Quarkus 在 dev 模式下运行时,quarkus-hibernate-orm
扩展会运行 src/main/resources
中的 import.sql
脚本。更多详细信息请参见此处。
性能影响
在 dev 模式下,最小化应用程序的运行时占用空间不是主要目标(尽管 Quarkus 仍然启动得足够快并且内存消耗很少)- 主要目标是实现开发者愉悦。因此,每次执行实时重新加载时,都会加载更多的类并执行构建时操作。
相比之下,在生产应用程序中,Quarkus 的主要目标是消耗最少的内存和启动时间。因此,在运行生产应用程序时,(根据定义)不会执行构建时操作,并且在运行时根本不存在构建时所需的各种基础结构类。此外,fast-jar
包类型附带的专门构建的类加载器可确保类查找尽可能快,同时保持内存中的类加载器数量最少。
由于优化性能从未是 dev 模式的目标,为了改善启动时间,JVM 的 C2 编译器在 dev 模式下是禁用的。 |