java在线运行工具「必看:教你创建一个普通的 Java 项目」

美好的1天即将在这里开始,下面就由笔者蒋凤言来一起聊聊java在线运行工具,教你创建一个普通的 Java 项目,以及语言,代码,编译器这些一系列的相关干货内容,认认真真阅读完,若能把我想表达的全部理解,相信你已经离大牛不远了哈!

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

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

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

https://start.spring.io/

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

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

mvn spring-boot:build-image
gradle bootBuildImage

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

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

神奇!

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

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

GraalVM是什么?

graalvm也是oracle的项目,它的代码地址是:

mvn spring-boot:build-image
gradle bootBuildImage

项目地址是:

www.graalvm.org/docs/

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

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

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

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

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

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

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

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

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

public class Example {
    public static void main(String[] args) {
        String str = "Native Image is awesome";
        String reversed = reverseString(str);
        System.out.println("The reversed string is: " + reversed);
    }

    public static String reverseString(String str) {
        if (str.isEmpty())
            return str;
        return reverseString(str.substring(1)) + str.charAt(0);
    }
}

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

javac Example.java
java Example

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

native-image Example

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

有什么好处?

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

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

  1. 系统的性能分析会在编译阶段就给出
  2. 没用的部分和代码将不会编译,直接会被移除,这得益于前些java版本的模块化
  3. 需要提前对反射、资源和动态代理进行转换,没有类加载的延迟
  4. classpath在编译阶段固定
  5. class将不会被懒加载,回在启动的时候一股脑放到内存

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

End

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

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

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

好了,今天就给各位讲到这里,希望对你有帮助,看完了,如果你觉得java在线运行工具「必看:教你创建一个普通的 Java 项目」还不错的话希望多多支持哦!浏览寂寞网更多页面学习更多相关知识哦!

本文发布者:万事通,不代表寂寞网立场,转载请注明出处:https://www.jimowang.com/p/24456.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jimowangmail@126.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年12月23日 10:37
下一篇 2022年12月24日 09:02

相关推荐

  • 结婚帮别人铺床不吉利吗 优选:​为什么结婚不可以帮别人铺床

    很高兴又和各位见面了,今天秦晶给大家分享一些关于结婚帮别人铺床不吉利吗,​为什么结婚不可以帮别人铺床的观点,还有关于婚礼,花生,桂圆,干果,莲子等等各种实用干货和最新技巧,阅读这篇文章之后,我相信你会更加深入地理解这个领域的基础知识。 结婚帮别人铺床不吉利吗是很多人在问的,毕竟结婚是人生中非常重要的一个仪式,而铺床则是婚礼中的一个重要环节。铺床不仅是展示新人…

    2023年3月31日
  • 英雄联盟维护一般几个小时「附:英雄联盟维护中要多久」

    首先,卫涛鸿感谢你能坚持经常过来关注我!下面我就来说说英雄联盟维护一般几个小时,英雄联盟维护中要多久,以及英雄,联盟,小时,都会,内容相关的事项,希望各位能认真阅读。因为,只有这样才能真正理解和掌握! 本期内容:《英雄联盟》维护一般到几点? 相信不少小伙伴在空闲的时间里,都会想娱乐一下自己,于是熟悉的打开了电脑,在点开心仪的游戏后,却发现登录按钮是完全灰色,…

    2023年2月5日 自媒体
  • 神十五乘组安全返回 指令长费俊龙连说3个很好 网友:欢迎回家

    各位朋友们大家好,我是本站新闻记者周钰超,近来,神十五乘组安全返回 指令长费俊龙连说3个很好 网友:欢迎回家引起了不少人的热议和关注,成为了网络上备受关注的话题。现在就让我们一起来探究这件事的具体情况吧! 6月4日讯,据央视报道,北京时间今晨,神舟十五号载人飞船返回舱成功着陆。 指令长费俊龙连说三个“很好”:“我们三个人感觉都很好,状态很好,身体很好!” 网…

    2023年6月4日
  • 辅酶q10高浓度和低浓度哪个好 详解:辅酶q10高浓度和低浓度区别

    很高兴又见面了,这次承宇要和大家聊聊辅酶q10高浓度和低浓度哪个好,辅酶q10高浓度和低浓度区别这个话题,还有辅酶,区别,细胞,能量,心肌的一些实用干货和最新内容分享,如果你想要在这个领域中有所成就,那么你需要先从基础开始学习。 辅酶q10是生活中比较常见的一种保健品,正确服用对身体有一定的好处,很多人都会吃辅酶q10。辅酶q10有低浓度的,也有高浓度的,两…

    2023年6月2日
  • 涡轮增压会减少发动机寿命吗「必看:涡轮增压的车发动机寿命短吗」

    小伙伴们大家好,今天李思霏给大家分析下关于涡轮增压会减少发动机寿命吗,涡轮增压的车发动机寿命短吗的事情,还有发动机,机油,寿命,时候,水泵等各种干货文章,希望你认真看完这篇文章后,能充分理解我想表达的意思。相信你很快就能掌握!你离大牛越来越近了! 大家好,我是小李。我身边很多人的车子都是涡轮增压的,小排量涡轮增压发动机现在还是比较流行的。经常听修理师傅说涡轮…

    2023年2月21日 自媒体
  • 贷款买房20年和30年哪个划算「新手必看:几年内还清最划算」

    哈喽,小伙伴们大家好,今天王凡卜说的这篇文章贷款买房20年和30年哪个划算,几年内还清最划算,还有关于年限,利息,贷款,压力,时候等等各种相关干货,希望你认真看完这篇文章后,能充分理解我想表达的意思。相信你很快就能掌握!你离大牛越来越近了! 如今大家在银行办理房贷的时候,是可以选择年限的,而房贷年限最常见的就是20年到30年,不过贷款年限越高利息越多。那么贷…

    自媒体 2023年1月23日