AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

讓Java起飛的技術(shù)...

來(lái)源: 責(zé)編: 時(shí)間:2023-11-10 09:15:08 265觀看
導(dǎo)讀GraalVMGraalVM是一個(gè)高性能運(yùn)行時(shí)環(huán)境,它基于OpenJDK, HotSpot和JRockit,并提供了在Java虛擬機(jī)上運(yùn)行其他語(yǔ)言的能力,比如JavaScript,Python,Ruby等。旨在提高基于Java和JVM的應(yīng)用的性能并簡(jiǎn)化Java云原生服務(wù)的構(gòu)建和運(yùn)行

GraalVM

GraalVM是一個(gè)高性能運(yùn)行時(shí)環(huán)境,它基于OpenJDK, HotSpot和JRockit,并提供了在Java虛擬機(jī)上運(yùn)行其他語(yǔ)言的能力,比如JavaScript,Python,Ruby等。旨在提高基于Java和JVM的應(yīng)用的性能并簡(jiǎn)化Java云原生服務(wù)的構(gòu)建和運(yùn)行kp828資訊網(wǎng)——每日最新資訊28at.com

kp828資訊網(wǎng)——每日最新資訊28at.com

GraalVM與JDK的對(duì)比

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

GraalVM的使用場(chǎng)景

  • 微服務(wù)架構(gòu)在微服務(wù)架構(gòu)中,每個(gè)服務(wù)都需要獨(dú)立部署和擴(kuò)展。GraalVM可以作為服務(wù)的基礎(chǔ)運(yùn)行時(shí)環(huán)境,提供高性能和低內(nèi)存消耗的支持。同時(shí)服務(wù)之間的頻繁調(diào)用,以及各個(gè)服務(wù)的部署,都依賴于服務(wù)本身的性能以及啟動(dòng)速度。
  • 云計(jì)算在云計(jì)算環(huán)境中,資源利用率是關(guān)鍵因素。GraalVM可以在有限的資源下提供更高的性能,降低云服務(wù)的運(yùn)營(yíng)成本。
  • 大數(shù)據(jù)處理大數(shù)據(jù)處理需要高性能和低延遲的計(jì)算能力。GraalVM可以有效地支持各種數(shù)據(jù)處理任務(wù),提高數(shù)據(jù)處理速度。

GraalVM的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):

高性能:GraalVM通過(guò)即時(shí)編譯技術(shù)和多語(yǔ)言并行執(zhí)行實(shí)現(xiàn)了高性能的運(yùn)行時(shí)環(huán)境。kp828資訊網(wǎng)——每日最新資訊28at.com

低內(nèi)存消耗:GraalVM采用低延遲垃圾回收技術(shù)實(shí)現(xiàn)了高效的內(nèi)存管理。kp828資訊網(wǎng)——每日最新資訊28at.com

多語(yǔ)言支持:GraalVM支持多種編程語(yǔ)言,降低了開發(fā)者的學(xué)習(xí)成本。kp828資訊網(wǎng)——每日最新資訊28at.com

跨平臺(tái)兼容性:GraalVM基于OpenJDK, HotSpot和JRockit,具有良好的跨平臺(tái)兼容性。kp828資訊網(wǎng)——每日最新資訊28at.com

  • 缺點(diǎn):
  • 學(xué)習(xí)成本:雖然GraalVM支持多種編程語(yǔ)言,但對(duì)于Java開發(fā)者來(lái)說(shuō),需要學(xué)習(xí)新的編程模型和API。
  • 社區(qū)支持:相較于JDK,GraalVM的社區(qū)支持相對(duì)較弱。

AOT與JIT

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

JIT編譯器是在程序運(yùn)行的時(shí)候進(jìn)行編譯,這個(gè)過(guò)程是動(dòng)態(tài)的, 并且每次運(yùn)行程序時(shí)都可能對(duì)代碼進(jìn)行重新編譯。這樣的編譯方式能夠支持更多的動(dòng)態(tài)特性,峰值性能更高,更有利于調(diào)試。據(jù)說(shuō)JIT編譯可以拿到比AOT編譯更多的運(yùn)行時(shí)信息,從而做出更優(yōu)化的決策。kp828資訊網(wǎng)——每日最新資訊28at.com

AOT編譯器則是在程序運(yùn)行前就進(jìn)行編譯,這個(gè)過(guò)程是靜態(tài)的。應(yīng)用程序在安裝的時(shí)候會(huì)通過(guò)dex2oat工具將dex文件預(yù)編譯成ELF文件,這樣在每次運(yùn)行程序時(shí), 因?yàn)榇a已經(jīng)被提前編譯過(guò),所以不需要再重新編譯。這種方式使得應(yīng)用的啟動(dòng)速度更快,資源占用也略微低一些。kp828資訊網(wǎng)——每日最新資訊28at.com

值得一提的是,AOT和JIT也可以結(jié)合使用,以發(fā)揮各自的優(yōu)勢(shì)。例如在某些語(yǔ)言或框架中,可以使用靜態(tài)AOT編譯來(lái)提前將整個(gè)應(yīng)用程序編譯好,而在程序運(yùn)行過(guò)程中則使用動(dòng)態(tài)JIT編譯來(lái)提升程序的運(yùn)行效率。kp828資訊網(wǎng)——每日最新資訊28at.com

準(zhǔn)備

下載GraalVM

直接進(jìn)入官網(wǎng),https://www.graalvm.org/downloads/,根據(jù)自己計(jì)算機(jī)系統(tǒng)類型選擇對(duì)應(yīng)版本即可。kp828資訊網(wǎng)——每日最新資訊28at.com

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

如果有安裝SDKMAN,可以通過(guò)下面的命令安裝:kp828資訊網(wǎng)——每日最新資訊28at.com

sdk install java 21.0.1-graal

配置GraalVM環(huán)境

從下載的graalvm文件名稱也可以看出,其本身也是jdk,打開安裝文件里的bin目錄,可以看到也有java javac等等命令,可以將本地Java環(huán)境覆蓋,當(dāng)然這個(gè)不是必須的。比如我使用IDEA時(shí),選擇項(xiàng)目對(duì)應(yīng)的SDK即可。kp828資訊網(wǎng)——每日最新資訊28at.com

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

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

通過(guò)native-image可以把Java代碼編譯為本地二進(jìn)制可執(zhí)行文件。本地可執(zhí)行文件只包括運(yùn)行時(shí)所需的代碼,即應(yīng)用程序類、標(biāo)準(zhǔn)庫(kù)類、語(yǔ)言運(yùn)行時(shí)和來(lái)自JDK的靜態(tài)鏈接的本機(jī)碼。kp828資訊網(wǎng)——每日最新資訊28at.com

安裝Visual Studio

可以通過(guò)Visual Studio Installer來(lái)安裝,下載地址 https://visualstudio.microsoft.com/zh-hans/downloads/, 這里需要選擇17.0以上的版本,否則后面會(huì)出現(xiàn)問(wèn)題,我這里選擇的是Visual Studio Community2022kp828資訊網(wǎng)——每日最新資訊28at.com

圖片圖片kp828資訊網(wǎng)——每日最新資訊28at.com

示例

  • 將一個(gè)Java文件生成一個(gè)可執(zhí)行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. 測(cè)試
com.sucl.blog.vm.graalvm.HelloWorld.exe

kp828資訊網(wǎng)——每日最新資訊28at.com

  • 從Spring Boot 3.0就已經(jīng)支持GraalVM原生鏡像,這里通過(guò)一個(gè)基于Spring Boot的簡(jiǎn)單項(xiàng)目來(lái)看如何使用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. 編譯打包可以直接通過(guò)mvn命令:
mvn -Pnative clean native:compile -f pom.xml

或者通過(guò)右側(cè)Maven選項(xiàng),選擇native插件,配置運(yùn)行參數(shù),直接運(yùn)行即可kp828資訊網(wǎng)——每日最新資訊28at.com

圖片圖片kp828資訊網(wǎng)——每日最新資訊28at.com

整個(gè)打包過(guò)程比較長(zhǎng),由于需要將jar文件轉(zhuǎn)換可直接運(yùn)行的成二進(jìn)制exe文件,整個(gè)編譯的過(guò)程都會(huì)比較漫長(zhǎng)。啟動(dòng)完成后可以看到這樣的信息kp828資訊網(wǎng)——每日最新資訊28at.com

圖片圖片kp828資訊網(wǎng)——每日最新資訊28at.com

  1. 測(cè)試

在項(xiàng)目target目錄中,可以看到生成的exe文件,直接雙擊運(yùn)行。以前幾秒甚至幾十秒才能啟動(dòng)的項(xiàng)目,現(xiàn)在實(shí)現(xiàn)了秒開...kp828資訊網(wǎng)——每日最新資訊28at.com

通過(guò)GraalVM Native Image,可以將Java字節(jié)碼直接編譯成特定于平臺(tái)的、自包含的本機(jī)可執(zhí)行文件,從而實(shí)現(xiàn)更快的啟動(dòng)速度和更小的應(yīng)用程序占用空間。java跨平臺(tái)的特性好像也沒(méi)了...kp828資訊網(wǎng)——每日最新資訊28at.com

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

其他支持

通過(guò)官網(wǎng)可以看到,GraalVM Native除了支持上面的基于jar的構(gòu)建,還有以下kp828資訊網(wǎng)——每日最新資訊28at.com

圖片圖片kp828資訊網(wǎng)——每日最新資訊28at.com

遇到的問(wèn)題

  • 編譯時(shí)出現(xiàn)如下問(wèn)題
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后記得根據(jù)你的安裝路徑來(lái)配置系統(tǒng)環(huán)境變量:kp828資訊網(wǎng)——每日最新資訊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

擴(kuò)展內(nèi)容

  • Spring Native

Spring Native是Spring Boot團(tuán)隊(duì)與GraalVM團(tuán)隊(duì)合作的產(chǎn)物,作為一個(gè)獨(dú)立的子項(xiàng)目存在。它充分利用了GraalVM的特性,例如AOT編譯,以提供更快的啟動(dòng)速度和更低的內(nèi)存消耗。此外,Spring Native還支持將Spring Boot應(yīng)用程序編譯成本地可執(zhí)行文件。kp828資訊網(wǎng)——每日最新資訊28at.com

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

目前Spring Native已經(jīng)由Spring Boot替代kp828資訊網(wǎng)——每日最新資訊28at.com

https://docs.spring.io/spring-boot/docs/current/reference/html/native-image.htmlkp828資訊網(wǎng)——每日最新資訊28at.com

  • Quarkus

Quarkus的創(chuàng)建是為了使Java開發(fā)人員能夠?yàn)楝F(xiàn)代的、云原生的世界創(chuàng)建應(yīng)用程序。Quarkus是一個(gè)為GraalVM和HotSpot定制的Kubernetes 原生Java框架,由最佳的Java庫(kù)和標(biāo)準(zhǔn)精心打造。其目標(biāo)是使Java成為Kubernetes和無(wú)服務(wù)器環(huán)境的領(lǐng)先平臺(tái),同時(shí)為開發(fā)者提供一個(gè)框架, 以解決更廣泛的分布式應(yīng)用架構(gòu)問(wèn)題。kp828資訊網(wǎng)——每日最新資訊28at.com

https://cn.quarkus.io/about/kp828資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-19897-0.html讓Java起飛的技術(shù)...

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 你可能聽說(shuō)過(guò)雪花算法

下一篇: 信貸系統(tǒng)中是如何使用征信數(shù)據(jù)?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top