![]() |
VOOZH | about |
从一开始,Quarkus的设计就围绕着容器优先的理念。这意味着Quarkus应用程序在以下方面进行了优化,以达到低内存使用和快速启动的目的:
👁 Quarkus构建时原则Quarkus的中心思想是在构建时做传统框架在运行时做的事情:配置解析、classpath扫描、基于classloading的功能切换,等等。
尽可能将更多的处理在构建时完成;因此,你的应用程序只包含在运行时使用的类。在传统的框架中,所有执行初始应用部署所需的类都在应用的生命周期中存在,尽管它们只被使用一次。在Quarkus中,它们甚至不会被加载到生产用的JVM中。Quarkus并没有到此为止。在构建时的处理过程中,它为你的应用程序使用的所有组件的初始化做准备。由于所有的元数据处理都已经完成,这带来了更少的内存使用和更快的启动时间。
Quarkus尽可能地避免反射,减少启动时间和内存使用。在构建时的处理过程中,扩展可以分析应用程序代码和classpath上可用的类,并以常规调用取代反射调用。通过在构建时使用生成的自定义代理,也可以防止使用动态代理。
Arc是Quarkus使用的依赖注入框架,它消除了所有的反射调用,并在构建时推断出注入图。因此,当应用程序启动时,不需要昂贵的查找,它已经完成了!
GraalVM原生可执行文件支持从一开始就是Quarkus设计的重要组成部分。当一个应用程序被编译成一个原生可执行文件时,它的启动速度要快得多,并且可以在比标准JVM小得多的堆中运行。原生编译器使用积极的死代码消除技术,只嵌入JVM的部分和应用程序绝对需要的类。Quarkus使构建优化的原生可执行文件变得非常容易。构建时的方法允许Quarkus在你的应用程序上收集足够的元数据,以便对编译进行微调。没有-H:+ReportUnsupportedElementsAtRuntime标志,没有回退,没有妥协!
在Quarkus应用程序的原生编译过程中,我们尽可能多地对框架进行预启动。这意味着产生的原生可执行文件已经运行了大部分的启动代码,并将结果序列化到可执行文件中:启动速度更快!
所有允许减少内存使用和提供更快的启动时间的技术,不仅在容器中是有利的。即使在裸金属环境上,它也会减少你的内存压力,而且不必等待10秒就能看到你的应用程序运行,这总是令人愉快的。
在设计Quarkus时,我们不仅关注容器,还关注将Quarkus应用程序部署到容器协调器(如Kubernetes)上。Quarkus构建时处理还会生成Kubernetes元数据,这样就可以将应用程序部署到Kubernetes上了。运行时功能(如健康检查和指标)是开箱即用的。Quarkus在构建时收集所有必需的元数据,以创建Kubernetes部署描述符并生成容器镜像。一个命令行就可以将应用程序部署到Kubernetes集群上。
Quarkus is open. All dependencies of this project are available under the Apache Software License 2.0 or compatible license. CC by 3.0
This website was built with Jekyll, is hosted on GitHub Pages and is completely open source. If you want to make it better, fork the website and show us what you’ve got.