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

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

構(gòu)建第一個(gè)GraalVM應(yīng)用鏡像,體驗(yàn)毫秒級(jí)極速啟動(dòng)!

來源: 責(zé)編: 時(shí)間:2023-10-10 18:31:42 291觀看
導(dǎo)讀介紹GraalVM使用其Ahead-Of-Time(AOT)編譯器將Java應(yīng)用程序編譯為機(jī)器可執(zhí)行文件。這些可執(zhí)行文件可以直接在目標(biāo)機(jī)器上執(zhí)行,而無需使用即時(shí)編譯器(JIT)。GraalVM生成的二進(jìn)制文件體積較小,啟動(dòng)速度快,并且在沒有任何預(yù)熱的

介紹

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

GraalVM使用其Ahead-Of-Time(AOT)編譯器將Java應(yīng)用程序編譯為機(jī)器可執(zhí)行文件。這些可執(zhí)行文件可以直接在目標(biāo)機(jī)器上執(zhí)行,而無需使用即時(shí)編譯器(JIT)。GraalVM生成的二進(jìn)制文件體積較小,啟動(dòng)速度快,并且在沒有任何預(yù)熱的情況下提供最佳性能。此外,這些可執(zhí)行文件的內(nèi)存占用和CPU使用率低于在JVM上運(yùn)行的應(yīng)用程序。8gp28資訊網(wǎng)——每日最新資訊28at.com

Docker允許我們將軟件組件打包成Docker鏡像,并作為Docker容器運(yùn)行。Docker容器包含應(yīng)用程序運(yùn)行所需的一切,包括應(yīng)用代碼、運(yùn)行時(shí)、系統(tǒng)工具和庫(kù)。8gp28資訊網(wǎng)——每日最新資訊28at.com

在本文中,我們創(chuàng)建一個(gè)Java應(yīng)用程序的GraalVM原生鏡像,并將其作為Docker容器運(yùn)行。8gp28資訊網(wǎng)——每日最新資訊28at.com

什么是原生鏡像?

原生鏡像是一種將Java代碼提前編譯成本地可執(zhí)行文件的技術(shù)。這個(gè)本地可執(zhí)行文件只包含在運(yùn)行時(shí)需要執(zhí)行的代碼,包括應(yīng)用程序類、標(biāo)準(zhǔn)庫(kù)類、語言運(yùn)行時(shí)以及來自JDK的靜態(tài)鏈接的本機(jī)代碼。8gp28資訊網(wǎng)——每日最新資訊28at.com

原生鏡像構(gòu)建器(native-image)掃描應(yīng)用程序類和其他元數(shù)據(jù),來創(chuàng)建特定于操作系統(tǒng)和架構(gòu)的二進(jìn)制文件。native-image工具對(duì)應(yīng)用程序代碼進(jìn)行靜態(tài)分析,確定在應(yīng)用程序運(yùn)行時(shí)可達(dá)到的類和方法。然后,它將所需的類、方法和資源編譯成一個(gè)二進(jìn)制可執(zhí)行文件。8gp28資訊網(wǎng)——每日最新資訊28at.com

原生鏡像的好處

原生鏡像可執(zhí)行文件具有以下幾個(gè)優(yōu)點(diǎn):8gp28資訊網(wǎng)——每日最新資訊28at.com

  • 由于原生鏡像構(gòu)建器僅編譯運(yùn)行時(shí)所需的資源,因此可執(zhí)行文件較小。
  • 原生可執(zhí)行文件具有非常快的啟動(dòng)時(shí)間,因?yàn)樗鼈冊(cè)谀繕?biāo)機(jī)器上直接執(zhí)行,而無需使用JIT編譯器。
  • 由于只打包所需的應(yīng)用程序資源,提供了較小的被攻擊面。
  • 適用于打包到輕量級(jí)容器鏡像(例如Docker鏡像)中,以實(shí)現(xiàn)快速高效的部署。

構(gòu)建GraalVM原生鏡像

在本節(jié)中,我們將為一個(gè)Spring Boot應(yīng)用程序構(gòu)建一個(gè)GraalVM原生鏡像。首先,需要安裝GraalVM并設(shè)置JAVA_HOME環(huán)境變量。其次,創(chuàng)建一個(gè)帶有Spring Web和GraalVM原生支持依賴的Spring Boot應(yīng)用程序:8gp28資訊網(wǎng)——每日最新資訊28at.com

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId>    <version>3.1.4</version></dependency>

還需要添加以下插件以支持GraalVM原生鏡像:8gp28資訊網(wǎng)——每日最新資訊28at.com

<build>    <plugins>        <plugin>            <groupId>org.graalvm.buildtools</groupId>            <artifactId>native-maven-plugin</artifactId>            <version>0.9.27</version>        </plugin>    </plugins></build>

該應(yīng)用程序包含一個(gè)REST Controller 示例:8gp28資訊網(wǎng)——每日最新資訊28at.com

@RestControllerclass HelloController {	    @GetMapping    public String hello() {	    return "Hello GraalVM";    }}

使用Maven命令構(gòu)建原生可執(zhí)行文件:8gp28資訊網(wǎng)——每日最新資訊28at.com

$mvn -Pnative native:compile

使用native-maven-plugin構(gòu)建GraalVM原生鏡像。由于GraalVM原生鏡像編譯器執(zhí)行靜態(tài)代碼分析,與常規(guī)的Java應(yīng)用程序編譯相比,構(gòu)建時(shí)間較長(zhǎng)。8gp28資訊網(wǎng)——每日最新資訊28at.com

以下是GraalVM編譯的輸出示例:8gp28資訊網(wǎng)——每日最新資訊28at.com

========================================================================================================================GraalVM Native Image: Generating 'springboot-graalvm-docker' (executable)...========================================================================================================================<strong>[1/8] Initializing... (42.7s @ 0.15GB)</strong>Java version: 17.0.8+9-LTS, vendor version: Oracle GraalVM 17.0.8+9.1Graal compiler: optimization level: 2, target machine: x86-64-v3, PGO: ML-inferredC compiler: gcc (linux, x86_64, 11.3.0)Garbage collector: Serial GC (max heap size: 80% of RAM)// 省略不重要日志<strong>[2/8] Performing analysis... [******] (234.6s @ 1.39GB)</strong>15,543 (90.25%) of 17,222 types reachable25,854 (67.59%) of 38,251 fields reachable84,701 (65.21%) of 129,883 methods reachable4,906 types, 258 fields, and 4,984 methods registered for reflection64 types, 70 fields, and 55 methods registered for JNI access4 native libraries: dl, pthread, rt, z[3/8] Building universe... (14.7s @ 2.03GB)[4/8] Parsing methods... [*******] (55.6s @ 2.05GB)[5/8] Inlining methods... [***] (4.9s @ 2.01GB)[6/8] Compiling methods... [**********[6/8] Compiling methods... [*******************] (385.2s @ 3.02GB)[7/8] Layouting methods... [****] (14.0s @ 2.00GB)[8/8] Creating image... [*****] (30.7s @ 2.72GB)48.81MB (58.93%) for code area: 48,318 compilation units30.92MB (37.33%) for image heap: 398,288 objects and 175 resources3.10MB ( 3.75%) for other data82.83MB in total// 省略不重要日志Finished generating 'springboot-graalvm-docker' in 13m 7s.// 省略不重要日志

在上述編譯輸出中需要關(guān)注一些關(guān)鍵點(diǎn),如下:8gp28資訊網(wǎng)——每日最新資訊28at.com

  • 編譯使用GraalVM的Java編譯器來編譯應(yīng)用程序。
  • 編譯器對(duì)類型、字段和方法進(jìn)行可達(dá)性檢查。
  • 然后編譯構(gòu)建原生可執(zhí)行文件,并顯示可執(zhí)行文件的大小和編譯所花費(fèi)的時(shí)間。
  • 成功構(gòu)建后,我們可以在目標(biāo)目錄中找到原生可執(zhí)行文件。該可執(zhí)行文件可以在命令行中執(zhí)行。

構(gòu)建Docker鏡像

接下來為前一步生成的原生可執(zhí)行文件開發(fā)一個(gè)Docker鏡像。8gp28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建一個(gè)Dockerfile:8gp28資訊網(wǎng)——每日最新資訊28at.com

FROM ubuntu:jammyCOPY target/springboot-graalvm-docker /springboot-graalvm-dockerCMD ["/springboot-graalvm-docker"]

接下來,使用如下命令構(gòu)建Docker鏡像:8gp28資訊網(wǎng)——每日最新資訊28at.com

$docker build -t springboot-graalvm-docker .

成功構(gòu)建后,可以看到`springboot-graalvm-docker`的Docker鏡像已經(jīng)可以使用了:8gp28資訊網(wǎng)——每日最新資訊28at.com

$docker images | grep springboot-graalvm-docker

可以使用以下命令執(zhí)行這個(gè)鏡像:8gp28資訊網(wǎng)——每日最新資訊28at.com

$docker run -p 8080:8080 springboot-graalvm-docker

上述命令啟動(dòng)了容器,Spring Boot的啟動(dòng)日志如下:8gp28資訊網(wǎng)——每日最新資訊28at.com

// 省略不重要日志***  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization <strong>completed in 14 ms</strong>***  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''***  INFO 1 --- [           main] c.b.g.GraalvmDockerImageApplication      : Started GraalvmDockerImageApplication in 0.043 seconds (process running for 0.046)

應(yīng)用程序在43毫秒內(nèi)啟動(dòng)。我們可以訪問REST端點(diǎn):8gp28資訊網(wǎng)——每日最新資訊28at.com

$curl localhost:8080

輸出如下:8gp28資訊網(wǎng)——每日最新資訊28at.com

Hello GraalVM


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

本文鏈接:http://www.www897cc.com/showinfo-26-12729-0.html構(gòu)建第一個(gè)GraalVM應(yīng)用鏡像,體驗(yàn)毫秒級(jí)極速啟動(dòng)!

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

上一篇: 從 ELK/EFK 到 PLG,是時(shí)候換個(gè)日志框架了

下一篇: 如何校驗(yàn)內(nèi)存數(shù)據(jù)的一致性,DynamicExpresso 算是幫上大忙了

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 分享六款相見恨晚的PPT模版網(wǎng)站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網(wǎng)站旨在為全球Office用戶提供豐富的高品質(zhì)原創(chuàng)PPT模板、實(shí)用文檔、數(shù)據(jù)圖表及個(gè)性化定制服務(wù)。優(yōu)點(diǎn):OfficePLUS是微軟官方網(wǎng)站,囊括PPT模板、Word模
  • 十個(gè)簡(jiǎn)單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強(qiáng)大而靈活的功能,用于修改或增強(qiáng)函數(shù)或類的行為。裝飾器本質(zhì)上是一個(gè)函數(shù),它接受另一個(gè)函數(shù)或類作為參數(shù),并返回一個(gè)新的函數(shù)或類。它們通常用
  • 多線程開發(fā)帶來的問題與解決方法

    使用多線程主要會(huì)帶來以下幾個(gè)問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結(jié)束訪問某一數(shù)據(jù)期間,該數(shù)據(jù)被其他的線程所修改,那么對(duì)于當(dāng)前線程而言,該線程
  • 三萬字盤點(diǎn) Spring 九大核心基礎(chǔ)功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎(chǔ)功能。話不多說,先上目錄:圖片友情提示,本文過長(zhǎng),建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個(gè)核心的基礎(chǔ)功能,不
  • Python異步IO編程的進(jìn)程/線程通信實(shí)現(xiàn)

    這篇文章再講3種方式,同時(shí)講4中進(jìn)程間通信的方式一、 Python 中線程間通信的實(shí)現(xiàn)方式共享變量共享變量是多個(gè)線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 三星顯示已開始為AR設(shè)備研發(fā)硅基LED微顯示屏

    7月18日消息,據(jù)外媒報(bào)道,隨著蘋果首款頭顯產(chǎn)品Vision Pro在6月份正式推出,AR/VR/MR等頭顯產(chǎn)品也就將成為各大公司下一個(gè)重要的競(jìng)爭(zhēng)領(lǐng)域,對(duì)顯示屏這一關(guān)
  • SN570 NVMe SSD固態(tài)硬盤 價(jià)格與性能兼具

    SN570 NVMe SSD固態(tài)硬盤是西部數(shù)據(jù)發(fā)布的最新一代WD Blue系列的固態(tài)硬盤,不僅閃存技術(shù)更為精進(jìn),性能也得到了進(jìn)一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風(fēng)扇版本

    據(jù)10 月 30 日外媒 TheVerge 消息報(bào)道,英特爾 Xe HPG Arc Alchemist 的正面實(shí)被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風(fēng)扇版本。另外,這款顯卡 PCB
  • 電博會(huì)上海爾智家模擬500平大平層,還原生活空間沉浸式體驗(yàn)

    電博會(huì)為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會(huì)上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗(yàn)。程傳
Top 主站蜘蛛池模板: 伊川县| 上思县| 威宁| 克东县| 乐陵市| 岳西县| 庄河市| 化州市| 平阳县| 岑溪市| 四会市| 中宁县| 西昌市| 宿松县| 永胜县| 抚顺县| 章丘市| 财经| 寿光市| 揭阳市| 平陆县| 汤阴县| 龙陵县| 延川县| 新闻| 合江县| 江油市| 临泉县| 互助| 理塘县| 出国| 吉林省| 德清县| 三门峡市| 林芝县| 太原市| 吉隆县| 苍山县| 孟村| 广昌县| 大港区|