日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
不需要jre運行Java?你沒看錯!

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

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),萬年企業(yè)網(wǎng)站建設(shè),萬年品牌網(wǎng)站建設(shè),網(wǎng)站定制,萬年網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,萬年網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

不需要再安裝jre,你的應(yīng)用程序?qū)⒑蚭xe一樣,直接在目標(biāo)機器上運行!而且啟動時間不到1秒鐘。

要體驗這個功能,我們從spring boot拿一個demo。

https://start.spring.io/

在這里選擇這個實驗性的功能SpringNative。下載下來之后,就可以使用maven進(jìn)行打包測試。

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

看一下這無敵的啟動速度.... 0.038秒... 幾乎是瞬時的!

神奇!

這一切,都得益于graalvm編譯器。不過,你至少要把JDK升級到11才能用,也算是堆Java8用戶的一種別樣的驅(qū)動吧。

當(dāng)然,只有在2.4.5以后的SpringBoot版本中,才支持Spring Native。

GraalVM是什么?

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

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

graalvm是一個想要統(tǒng)一天下的虛擬機。因為它相比較與HotSpotVM,還能夠運行其他語言比如ruby,python,php等。

它是一個新的JVM,不同的是由于做了適配,它能夠讓不同的語言跑在同一個vm下面。

看看下面這張圖,就知道graalvm的野心有多大。

這還沒完,它最吸引人的地方就在于,它能夠?qū)?yīng)用代碼,直接打包成native的二進(jìn)制可執(zhí)行代碼,運行時連JVM都不需要了!

大家都知道,native和跑在vm里完全是兩個檔次,否則也不會有jit這么牛x的技術(shù)存在了。連android和ios都知道,native的應(yīng)用流暢性比跑在monotouch上或者h(yuǎn)ybrid上高很多很多,對于追求性能的企業(yè)級應(yīng)用來說,這個功能就更加實用一些。

讓人驚訝的是,它為各個語言實現(xiàn)了一個可以溝通的橋梁。比如我看好js中的某個庫,不需要重新開發(fā)一個了,在Java中直接就可以用。這是因為,graalVM開發(fā)了跨語言互操作協(xié)議,能保證跨語言的互操作性。

現(xiàn)在這個功能,大多數(shù)平臺已經(jīng)支持了。

什么叫做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.     public static String reverseString(String str) {
  8.         if (str.isEmpty())
  9.             return str;
  10.         return reverseString(str.substring(1)) + str.charAt(0);
  11.     }
  12. }

通常情況下,我們直接這樣運行,或者打包成jar包。

 
 
 
 
  1. javac Example.java
  2. java Example

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

 
 
 
 
  1. native-image Example

執(zhí)行的時候,只需要輸入 ./Example 就可以了。

有什么好處?

使用native編譯的應(yīng)用,可以實現(xiàn)秒級別的啟動,運行更快,占用內(nèi)存更小。它與主流的部署方式如微服務(wù)、k8s等,更加的切合。

但它與傳統(tǒng)的JVM也有很多不同,主要體現(xiàn)在:

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

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

End

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

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

但愿graalvm能夠繼續(xù)發(fā)力,帶java繼續(xù)飛上幾十年,養(yǎng)我三代子孫!


網(wǎng)站標(biāo)題:不需要jre運行Java?你沒看錯!
鏈接分享:http://www.5511xx.com/article/coehidg.html