Spring Native 为使用 GraalVM 原生镜像编译器编译 Spring 应用为本地可执行文件提供支持。与 Java 虚拟机相比,原生镜像可以在许多场景下降低工作负载,包括微服务,函数式服务,非常适合容器和 Kubernetes。使用原生镜像有明显优势,如快速启动,提高峰值性能以及降低内存消耗。GraalVM 项目也有一些缺点和权衡,希望随着时间的推移有所改进。构建本地映像是一个繁重的过程,比常规应用程序要慢,预热后的运行时优化也更少。最后,比起 JVM 很多场景下还不成熟。常规 JVM 和此本机映像平台之间的主要区别:
- 在构建时会从主入口点对应用程序进行静态分析。
- 在构建时将未使用的零件删除。
- 反射,资源和动态代理需要配置。
- 类路径在构建时是固定的。
- 没有类延迟加载:可执行文件中附带的所有内容都将在启动时加载到内存中。
- 一些代码将在构建时运行。
- 一些 Java 切面类的特性未得到完全支持。
此项目的目标是孵化对 Spring Native(Spring JVM 的替代方案)的支持,并提供旨在打包到轻量级容器中的本地部署选项, 目标是在此新平台上直接支持 Spring 应用而不需要修改代码。
Spring Native 由以下模块组成:
- spring-native:运行 Spring Native 所需的运行时依赖,还提供了 Native hints API。
- spring-native-configuration:Spring AOT 插件使用的 Spring 类的配置提示,包括各种 Spring