日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

讓Java起飛的技術...

來源: 責編: 時間:2023-11-10 09:15:08 241觀看
導讀GraalVMGraalVM是一個高性能運行時環境,它基于OpenJDK, HotSpot和JRockit,并提供了在Java虛擬機上運行其他語言的能力,比如JavaScript,Python,Ruby等。旨在提高基于Java和JVM的應用的性能并簡化Java云原生服務的構建和運行

GraalVM

GraalVM是一個高性能運行時環境,它基于OpenJDK, HotSpot和JRockit,并提供了在Java虛擬機上運行其他語言的能力,比如JavaScript,Python,Ruby等。旨在提高基于Java和JVM的應用的性能并簡化Java云原生服務的構建和運行zax28資訊網——每日最新資訊28at.com

zax28資訊網——每日最新資訊28at.com

GraalVM與JDK的對比

  • 性能GraalVM在性能方面相較于JDK有著顯著的優勢。GraalVM通過即時編譯(JIT)技術實現了更低的啟動時間和更高的執行速度。通過JIT和AOT編譯器,可以在運行時和部署時將字節碼編譯成本地機器代碼,從而提高應用程序的性能。
  • 編譯方式GraalVM提供了AOT編譯器,可以在應用程序部署時將其編譯成本地機器代碼,從而進一步提高應用程序的性能和啟動時間。而JDK在這方面的支持相對較弱。
  • 語言支持GraalVM支持多種編程語言,如JavaScript、Python、R等,這使得開發者可以使用熟悉的語言進行開發,降低了學習成本。而JDK主要支持Java語言。
  • 內存消耗GraalVM在內存消耗方面也優于JDK。GraalVM采用了低延遲垃圾回收(LLGC)技術,可以在不影響性能的情況下實現更高效的內存管理。
  • 兼容性GraalVM提供了與Java虛擬機(JVM)兼容的API,使得已經使用JVM的應用程序可以無縫遷移到GraalVM上。這使得GraalVM在兼容性方面具有優勢。
  • 互操作性使用GraalVM Truffle,Java和其他支持的語言可以直接相互互操作,并在同一內存空間中來回傳遞數據。這種互操作性提高了不同語言之間的協作效率。

GraalVM的使用場景

  • 微服務架構在微服務架構中,每個服務都需要獨立部署和擴展。GraalVM可以作為服務的基礎運行時環境,提供高性能和低內存消耗的支持。同時服務之間的頻繁調用,以及各個服務的部署,都依賴于服務本身的性能以及啟動速度。
  • 云計算在云計算環境中,資源利用率是關鍵因素。GraalVM可以在有限的資源下提供更高的性能,降低云服務的運營成本。
  • 大數據處理大數據處理需要高性能和低延遲的計算能力。GraalVM可以有效地支持各種數據處理任務,提高數據處理速度。

GraalVM的優缺點

  • 優點:

高性能:GraalVM通過即時編譯技術和多語言并行執行實現了高性能的運行時環境。zax28資訊網——每日最新資訊28at.com

低內存消耗:GraalVM采用低延遲垃圾回收技術實現了高效的內存管理。zax28資訊網——每日最新資訊28at.com

多語言支持:GraalVM支持多種編程語言,降低了開發者的學習成本。zax28資訊網——每日最新資訊28at.com

跨平臺兼容性:GraalVM基于OpenJDK, HotSpot和JRockit,具有良好的跨平臺兼容性。zax28資訊網——每日最新資訊28at.com

  • 缺點:
  • 學習成本:雖然GraalVM支持多種編程語言,但對于Java開發者來說,需要學習新的編程模型和API。
  • 社區支持:相較于JDK,GraalVM的社區支持相對較弱。

AOT與JIT

JIT(Just-in-Time,即時編譯)和AOT(Ahead-of-Time,預編譯)是兩種主流的編譯技術。zax28資訊網——每日最新資訊28at.com

JIT編譯器是在程序運行的時候進行編譯,這個過程是動態的, 并且每次運行程序時都可能對代碼進行重新編譯。這樣的編譯方式能夠支持更多的動態特性,峰值性能更高,更有利于調試。據說JIT編譯可以拿到比AOT編譯更多的運行時信息,從而做出更優化的決策。zax28資訊網——每日最新資訊28at.com

AOT編譯器則是在程序運行前就進行編譯,這個過程是靜態的。應用程序在安裝的時候會通過dex2oat工具將dex文件預編譯成ELF文件,這樣在每次運行程序時, 因為代碼已經被提前編譯過,所以不需要再重新編譯。這種方式使得應用的啟動速度更快,資源占用也略微低一些。zax28資訊網——每日最新資訊28at.com

值得一提的是,AOT和JIT也可以結合使用,以發揮各自的優勢。例如在某些語言或框架中,可以使用靜態AOT編譯來提前將整個應用程序編譯好,而在程序運行過程中則使用動態JIT編譯來提升程序的運行效率。zax28資訊網——每日最新資訊28at.com

準備

下載GraalVM

直接進入官網,https://www.graalvm.org/downloads/,根據自己計算機系統類型選擇對應版本即可。zax28資訊網——每日最新資訊28at.com

我的電腦是WIN11,所以選擇了Java 17 | Windows(x64),對應下載的版本為:graalvm-jdk-17.0.9+11.1zax28資訊網——每日最新資訊28at.com

如果有安裝SDKMAN,可以通過下面的命令安裝:zax28資訊網——每日最新資訊28at.com

sdk install java 21.0.1-graal

配置GraalVM環境

從下載的graalvm文件名稱也可以看出,其本身也是jdk,打開安裝文件里的bin目錄,可以看到也有java javac等等命令,可以將本地Java環境覆蓋,當然這個不是必須的。比如我使用IDEA時,選擇項目對應的SDK即可。zax28資訊網——每日最新資訊28at.com

GRAALMVM_HOME= <your graalvm-jdk path>PATH=%GRAALMVM_HOME%/bin

這樣我們就可以在終端使用native-image命令了。zax28資訊網——每日最新資訊28at.com

通過native-image可以把Java代碼編譯為本地二進制可執行文件。本地可執行文件只包括運行時所需的代碼,即應用程序類、標準庫類、語言運行時和來自JDK的靜態鏈接的本機碼。zax28資訊網——每日最新資訊28at.com

安裝Visual Studio

可以通過Visual Studio Installer來安裝,下載地址 https://visualstudio.microsoft.com/zh-hans/downloads/, 這里需要選擇17.0以上的版本,否則后面會出現問題,我這里選擇的是Visual Studio Community2022zax28資訊網——每日最新資訊28at.com

圖片圖片zax28資訊網——每日最新資訊28at.com

示例

  • 將一個Java文件生成一個可執行exe程序
  1. 編寫Java代碼
public class HelloWorld {    public static void main(String[] args) {        System.out.println("Hello World!");    }}
  1. 編譯
javac  HelloWorld.java
  1. 打包
native-image com.sucl.blog.vm.graalvm.HelloWorld
  1. 測試
com.sucl.blog.vm.graalvm.HelloWorld.exe

zax28資訊網——每日最新資訊28at.com

  • 從Spring Boot 3.0就已經支持GraalVM原生鏡像,這里通過一個基于Spring Boot的簡單項目來看如何使用GraalVM
  1. 引入依賴,這里需要使用native-maven-plugin將最終的jar打包成exe文件
<project>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.graalvm.buildtools</groupId>                <artifactId>native-maven-plugin</artifactId>                <version>0.9.25</version>            </plugin>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>
  1. 編寫Java代碼
@RestController@SpringBootApplicationpublic class GraalVMApplication {    public static void main(String[] args) {        SpringApplication.run(GraalVMApplication.class, args);    }    @GetMapping    public String index(){        return "hello GraalVM";    }}
  1. 編譯打包可以直接通過mvn命令:
mvn -Pnative clean native:compile -f pom.xml

或者通過右側Maven選項,選擇native插件,配置運行參數,直接運行即可zax28資訊網——每日最新資訊28at.com

圖片圖片zax28資訊網——每日最新資訊28at.com

整個打包過程比較長,由于需要將jar文件轉換可直接運行的成二進制exe文件,整個編譯的過程都會比較漫長。啟動完成后可以看到這樣的信息zax28資訊網——每日最新資訊28at.com

圖片圖片zax28資訊網——每日最新資訊28at.com

  1. 測試

在項目target目錄中,可以看到生成的exe文件,直接雙擊運行。以前幾秒甚至幾十秒才能啟動的項目,現在實現了秒開...zax28資訊網——每日最新資訊28at.com

通過GraalVM Native Image,可以將Java字節碼直接編譯成特定于平臺的、自包含的本機可執行文件,從而實現更快的啟動速度和更小的應用程序占用空間。java跨平臺的特性好像也沒了...zax28資訊網——每日最新資訊28at.com

打開瀏覽器,輸入http://localhost:8080/則可以看到與普通項目相同的效果zax28資訊網——每日最新資訊28at.com

其他支持

通過官網可以看到,GraalVM Native除了支持上面的基于jar的構建,還有以下zax28資訊網——每日最新資訊28at.com

圖片圖片zax28資訊網——每日最新資訊28at.com

遇到的問題

  • 編譯時出現如下問題
Error: Error compiling query code (in C:/Users/Us/AppData/Local/Temp/SVM-9567697918431257239/AMD64LibCHelperDirectives.c). Compiler command ''C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64/cl.exe' /WX /W4 /wd4201 /wd4244 /wd4245 /wd4800 /wd4804 /wd4214 '/FeC:/Users/Us/AppData/Local/Temp/SVM-9567697918431257239/AMD64LibCHelperDirectives.exe' 'C:/Users/Us/AppData/Local/Temp/SVM-9567697918431257239/AMD64LibCHelperDirectives.c'' output included error: [AMD64LibCHelperDirectives.c, C:/Users/Us/AppData/Local/Temp/SVM-9567697918431257239/AMD64LibCHelperDirectives.c(1): fatal error C1034: stdio.h: 不包括路徑集]Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception

下載好Visual Studio后記得根據你的安裝路徑來配置系統環境變量:zax28資訊網——每日最新資訊28at.com

INCLUDE=C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrtC:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/umC:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/sharedC:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/includeLIB=C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22000.0/um/x64C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22000.0/ucrt/x64C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/lib/x64PATH=C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64

擴展內容

  • Spring Native

Spring Native是Spring Boot團隊與GraalVM團隊合作的產物,作為一個獨立的子項目存在。它充分利用了GraalVM的特性,例如AOT編譯,以提供更快的啟動速度和更低的內存消耗。此外,Spring Native還支持將Spring Boot應用程序編譯成本地可執行文件。zax28資訊網——每日最新資訊28at.com

Spring Boot 3的Native則更側重于與Spring Boot主體的整合,可能更深度地整合了Spring Boot的特性與功能。zax28資訊網——每日最新資訊28at.com

目前Spring Native已經由Spring Boot替代zax28資訊網——每日最新資訊28at.com

https://docs.spring.io/spring-boot/docs/current/reference/html/native-image.htmlzax28資訊網——每日最新資訊28at.com

  • Quarkus

Quarkus的創建是為了使Java開發人員能夠為現代的、云原生的世界創建應用程序。Quarkus是一個為GraalVM和HotSpot定制的Kubernetes 原生Java框架,由最佳的Java庫和標準精心打造。其目標是使Java成為Kubernetes和無服務器環境的領先平臺,同時為開發者提供一個框架, 以解決更廣泛的分布式應用架構問題。zax28資訊網——每日最新資訊28at.com

https://cn.quarkus.io/about/zax28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-19897-0.html讓Java起飛的技術...

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 你可能聽說過雪花算法

下一篇: 信貸系統中是如何使用征信數據?

標簽:
  • 熱門焦點
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結。現在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,&ldquo;7
  • 華為和江淮汽車合作開發百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發文稱,華為正在和江淮汽車合作,開發售價在100萬元的問界MPV,預計在2024年第2季度量產,銷量目標為上市首年交付5萬輛。
  • 三星電子Q2營收60萬億韓元 存儲業務營收同比仍下滑超過50%

    7月27日消息,據外媒報道,從三星電子所發布的財報來看,他們主要利潤來源的存儲芯片業務在今年二季度仍不樂觀,營收同比仍在大幅下滑,所在的設備解決方案
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發布的朋友圈
  • 電博會上海爾智家模擬500平大平層,還原生活空間沉浸式體驗

    電博會為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗。程傳
Top 主站蜘蛛池模板: 垦利县| 收藏| 交口县| 东海县| 油尖旺区| 集安市| 安阳县| 海宁市| 万荣县| 梁河县| 沐川县| 定边县| 安仁县| 合肥市| 越西县| 西乌| 沅江市| 定边县| 延长县| 大冶市| 清远市| 田东县| 油尖旺区| 哈尔滨市| 咸宁市| 平舆县| 思南县| 珠海市| 峨眉山市| 沂源县| 营口市| 白玉县| 葵青区| 云霄县| 高淳县| 合阳县| 婺源县| 佛冈县| 华阴市| 四平市| 卫辉市|