91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

不需要jre運行Java是真的嗎

發布時間:2021-06-26 13:49:50 來源:億速云 閱讀:152 作者:chen 欄目:web開發

本篇內容主要講解“不需要jre運行Java是真的嗎”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“不需要jre運行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的項目,它的代碼地址是:https://github.com/oracle/graal

項目地址是: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是真的嗎

什么叫做native呢?考慮下面這份代碼。

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也有很多不同,主要體現在:

  • 系統的性能分析會在編譯階段就給出

  • 沒用的部分和代碼將不會編譯,直接會被移除,這得益于前些java版本的模塊化

  • 需要提前對反射、資源和動態代理進行轉換,沒有類加載的延遲

  • classpath在編譯階段固定

  • class將不會被懶加載,回在啟動的時候一股腦放到內存

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

End

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

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

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

到此,相信大家對“不需要jre運行Java是真的嗎”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高台县| 嘉兴市| 湖南省| 朔州市| 含山县| 长兴县| 南投县| 格尔木市| 达孜县| 米易县| 繁昌县| 岫岩| 集贤县| 兴海县| 高邮市| 亚东县| 原阳县| 白银市| 北票市| 泰和县| 沾益县| 昂仁县| 喀喇| 靖远县| 大同市| 乌拉特后旗| 黄陵县| 岗巴县| 湖南省| 五河县| 博野县| 股票| 潞西市| 瑞金市| 开鲁县| 元朗区| 乐昌市| 商都县| 田阳县| 尚志市| 乌审旗|