Java Native
通常 Java 程序会占用很大的内存,启动也比较慢。这两个特点在一些内存受限的环境下会产生问题,例如嵌入式环境。
太大的内存占用对云原生环境也不太友好,如果系统有很多微服务,每个服务都需要占用很多内存,那么就需要更多的节点承载整个系统。
GraalVM#
GraalVM可以加速Java程序的启动,降低内存占用。
GraalVM还可以将Java程序编译成平台相关的可执行文件,可以进一步加快启动速度,降低内存占用。
附带的好处是平台相关的可执行文件很难被反编译,可以很好的保护代码。
但是 Native 的编译也会有一些限制,对于反射的支持有限。
Spring Native 项目可以帮助创建可以编译成 Native 的 Spring 应用。
Quarkus#
Quarkus是一个基于GraalVM的一个项目,主要是提供类似 Spring 的框架,便于编译 Native 应用。
不要认为JVM性能差#
编译成 Native 程序听起来性能应该很强,GraalVM 主要优化的是程序的启动速度和内存占用,JVM虽然内存占用大,但其执行效率依然是很高的。
所以如果项目选择编译成 Native 应该对性能进行测试。