除了GraalVM之外,在最近的Geecon会议上讨论最多的另一项技术是一个名为Java on CRaC的项目。
这个项目带来了两个功能,CRaC上的Java基本上在Oracle GraalVM上运行(目前)。
- 超快的应用程序启动。甚至比GraalVM的本地镜像还要快
- 快照应用的想法允许你立即启动到应用程序的状态,无需数据预热,只是砰的一声!应用程序在启动时就已经加载了所有的东西!
先决条件:
1、Linux machine (in my case):
INFRA [root@payment01 ~]# cat /etc/os-release |
2、Java on CRaC installed as JDK:
INFRA [root@payment01 ~]# java -version |
3、maven:
INFRA [root@payment01 ~]# mvn -version |
在CRaC上使用Java和Spring Boot的重要提示
要及时对你的应用程序进行CRaC检查点,你必须:
- 关闭你的应用程序打开的所有套接字。
- 关闭你的应用所打开的所有文件
第一个问题解决是使用嵌入式tomcat监听CRaC检查点生命周期:
<dependency> |
官方CRaC spring-boot example 示例中的8.5.78版本不能用于最后的Spring Boot 2.x , 请确保有9.0.58版本。我在含有CRaC的JDK 17上成功测试了Spring Boot 2.6.3。但更高版本的boot应该也可以工作。
CRaC和LINUX平台问题
我在提到的RED_HAT linux上运行Java CRaC的经验最好。在Oracle LINUX上运行CRaC是非常痛苦的。
总之,在这两种情况下,我不得不采用以下的解决方法来创建应用程序检查点。
MVC app for testing
@RestController |
IDataService在内存中保存数据。
总结
CRaC上的Java击败Oracle GraaVM的地方
- 与GraalVM相比,应用程序的启动速度甚至更快
- 基于反射的框架对应用程序的快照来说不是问题。GraalVM在这一点上很纠结
- GraalVM不允许你像CRaC那样及时从状态中启动应用程序。
Oracle GraaVM在CRaC上击败Java的地方
- 1000倍好的文档!
- GraalVM的本地镜像比基于CRaC的应用程序少消耗5倍的内存。当内存是你的首要任务时,请选择GraalVM。
源码案例点击标题