@[toc]
Spring Native
Spring Native 是什么
Spring Native 可以通过 GraalVM 将 Spring 应用程序编译成原生镜像,提供了一种新的方式来部署 Spring 应用。
Spring Native 支持 Java 和 Kotlin。
这个项目的目标是寻找 Spring JVM 的替代方案,提供一个能将应用程序打包,并运行在轻量级容器的方案。期望能够
在 Spring Native 中支持所有的 Spring 应用程序(几乎不用修改代码)。
优点
- 编译出来的原生 Spring 应用可以作为一个独立的可执行文件进行部署(不需要安装 JVM)
- 几乎瞬时的启动(一般小于 100 毫秒)
- 瞬时的峰值性能
- 更低的资源消耗
缺点
- 比 JVM 更长的构建时间
- 相比于传统的 Java 运行方式,运行时优化不足
原生镜像(native image)和常规 JVM 程序的区别
- 在构建时会从主入口点,静态分析应用程序
- 在构建时会移除未使用的代码
- 需要配置反射、动态代理等
- classpath 在构建时就已经确定
- 没有类延迟加载:可执行文件中所有的内容都会在启动时加载到内存中
- 在构建时就运行了一些代码
- 构建原生镜像还存在一些 局限性
前置条件:GraalVM
GraalVM 介绍起来篇幅比较长,这里仅简要介绍。官网:https://www.graalvm.org/
GraalVM 是一个高性能的多语言运行时环境。设计目的是能够提高用 Java 和其他 JVM 语言编写的应用程序的执行速度,同时
还为 JavaScript、Ruby、Python 和许多其他流行语言提供运行时。GraalVM 的多语言能力使得在一个应用程序中混合使用
多种编程语言成为可能,同时消除了不同语言间互相调用的成本。详细内容可参考:Get Started with GraalVM
支持的语言
- GraalVM For Java
- Python
- Ruby
- JavaScript & Node.js
- R
- LLVM
关键特性
- 高性能
- 提前编译
- 多语言
- 高级工具
GraalVM 下的 Java 微服务
- 启动时间快 50 倍以上
- 内存占用只需要 20% 左右