成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不需要jre運行Java?你沒看錯!

開發 前端
今天我們要介紹的是spring-native,它可以讓你的spring boot程序,體驗graalvm編譯器的特性,把你的應用直接編譯成native的!

[[401613]]

今天我們要介紹的是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也有很多不同,主要體現在:

  • 系統的性能分析會在編譯階段就給出
  • 沒用的部分和代碼將不會編譯,直接會被移除,這得益于前些java版本的模塊化
  • 需要提前對反射、資源和動態代理進行轉換,沒有類加載的延遲
  • classpath在編譯階段固定
  • class將不會被懶加載,回在啟動的時候一股腦放到內存

雖然native有很多好處,但它的編譯時間卻很長,因為要做大量的代碼靜態分析,這也是所有native程序的通病吧。

End

這種thin jar的思路,是不是感覺Java的發展越來越像golang了呢?docker鏡像也會因為這種改變便得更小更純粹,而脫離jre的Java應用也越來越像一個真正的程序了。

但可惜的是,這種編譯成native的思路雖然好,現階段還是無法和golang相抗衡,主要還是在于編譯器的差異上。

但愿graalvm能夠繼續發力,帶java繼續飛上幾十年,養我三代子孫!

 

責任編輯:趙寧寧 來源: 小姐姐味道
相關推薦

2012-08-23 09:50:07

測試測試人員軟件測試

2010-11-23 10:55:47

跳槽

2021-12-12 22:20:47

Docker開發容器

2018-01-29 13:18:42

前端JavaScript

2021-05-07 15:18:26

比特幣禁令監管

2019-07-15 08:00:00

AI人工智能

2017-09-19 15:40:23

Linuxsudo命令密碼

2017-03-13 13:54:40

戴爾

2014-12-08 11:12:23

HTML6

2020-07-28 08:28:07

JavaScriptswitch開發

2022-06-07 17:01:31

UI框架前端

2014-09-24 09:31:31

Dockersshd

2022-09-27 15:03:43

Java測試工具

2022-04-21 08:01:34

React框架action

2009-11-23 12:45:22

2014-06-19 14:49:37

iCloud認證令牌密碼

2018-01-17 15:33:14

2017-09-18 11:51:50

2015-05-05 14:50:21

Python不需要操作系統

2015-09-30 09:57:53

天分熱情工程師
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品在线视频免费观看 | 精品福利在线视频 | 激情三区 | 亚洲福利一区 | 日韩中文字幕第一页 | 亚洲视频观看 | 新91 | 天天干天天操天天看 | 国产精品亚洲精品日韩已方 | 国产精品久久久久久久久久 | 人妖无码 | 国产精品成人av | 东方伊人免费在线观看 | 亚洲国产成人av好男人在线观看 | 久久久99精品免费观看 | 成人精品一区二区 | 亚洲免费在线 | 国产成人福利 | 精品一区国产 | 不卡一区二区在线观看 | 国产美女在线播放 | 成人国产免费视频 | 成人在线精品视频 | 九九久久久 | 午夜精品一区二区三区在线观看 | 久久久久国产精品www | 自拍 亚洲 欧美 老师 丝袜 | 久久久久香蕉视频 | 黑人巨大精品欧美一区二区免费 | 日韩免费视频 | 国产精品久久毛片av大全日韩 | 国偷自产av一区二区三区 | 久久亚洲国产精品 | 亚洲一区二区日韩 | 欧美在线二区 | 国产成人精品一区二区三区 | 日本精品一区二区三区视频 | 成人av网站在线观看 | 欧美三区 | 91在线观看 | 99久久婷婷国产综合精品首页 |