文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

不需要jre运行Java?你没看错!

2024-12-03 04:30

关注

今天我们要介绍的是spring-native,它可以让你的spring boot程序,体验graalvm编译器的特性,把你的应用直接编译成native的!

不需要再安装jre,你的应用程序将和exe一样,直接在目标机器上运行!而且启动时间不到1秒钟。

要体验这个功能,我们从spring boot拿一个demo。

https://start.spring.io/

在这里选择这个实验性的功能SpringNative。下载下来之后,就可以使用maven进行打包测试。

  1. mvn spring-boot:build-image 
  2. gradle bootBuildImage 

看一下这无敌的启动速度.... 0.038秒... 几乎是瞬时的!

神奇!

这一切,都得益于graalvm编译器。不过,你至少要把JDK升级到11才能用,也算是堆Java8用户的一种别样的驱动吧。

当然,只有在2.4.5以后的SpringBoot版本中,才支持Spring Native。

GraalVM是什么?

graalvm也是oracle的项目,它的代码地址是:https://github.com/oracle/graal

项目地址是:www.graalvm.org/docs/

graalvm是一个想要统一天下的虚拟机。因为它相比较与HotSpotVM,还能够运行其他语言比如ruby,python,php等。

它是一个新的JVM,不同的是由于做了适配,它能够让不同的语言跑在同一个vm下面。

看看下面这张图,就知道graalvm的野心有多大。

这还没完,它最吸引人的地方就在于,它能够将应用代码,直接打包成native的二进制可执行代码,运行时连JVM都不需要了!

大家都知道,native和跑在vm里完全是两个档次,否则也不会有jit这么牛x的技术存在了。连android和ios都知道,native的应用流畅性比跑在monotouch上或者hybrid上高很多很多,对于追求性能的企业级应用来说,这个功能就更加实用一些。

让人惊讶的是,它为各个语言实现了一个可以沟通的桥梁。比如我看好js中的某个库,不需要重新开发一个了,在Java中直接就可以用。这是因为,graalVM开发了跨语言互操作协议,能保证跨语言的互操作性。

现在这个功能,大多数平台已经支持了。

什么叫做native呢?考虑下面这份代码。

  1. public class Example { 
  2.     public static void main(String[] args) { 
  3.         String str = "Native Image is awesome"
  4.         String reversed = reverseString(str); 
  5.         System.out.println("The reversed string is: " + reversed); 
  6.     } 
  7.  
  8.     public static String reverseString(String str) { 
  9.         if (str.isEmpty()) 
  10.             return str; 
  11.         return reverseString(str.substring(1)) + str.charAt(0); 
  12.     } 

通常情况下,我们直接这样运行,或者打包成jar包。

  1. javac Example.java 
  2. java Example 

但我们还可以多一步,就是把class文件native化。

  1. native-image Example 

执行的时候,只需要输入 ./Example 就可以了。

有什么好处?

使用native编译的应用,可以实现秒级别的启动,运行更快,占用内存更小。它与主流的部署方式如微服务、k8s等,更加的切合。

但它与传统的JVM也有很多不同,主要体现在:

虽然native有很多好处,但它的编译时间却很长,因为要做大量的代码静态分析,这也是所有native程序的通病吧。

End

这种thin jar的思路,是不是感觉Java的发展越来越像golang了呢?docker镜像也会因为这种改变便得更小更纯粹,而脱离jre的Java应用也越来越像一个真正的程序了。

但可惜的是,这种编译成native的思路虽然好,现阶段还是无法和golang相抗衡,主要还是在于编译器的差异上。

但愿graalvm能够继续发力,带java继续飞上几十年,养我三代子孙!

 

来源:小姐姐味道内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯