<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 3.3.0 新特性| 使用 CDS 優(yōu)化啟動時間

          共 11161字,需瀏覽 23分鐘

           ·

          2024-05-31 10:20

          一、CDS 是什么?

          類數(shù)據(jù)共享 (CDS) 是一項 JVM 功能,可幫助減少 Java 應(yīng)用程序的啟動時間和內(nèi)存占用。從 JDK 12 開始,默認(rèn)的 CDS 歸檔文件與 Oracle JDK 二進(jìn)制文件一起預(yù)打包。筆者測試使用的 OpenJDK 64-Bit Server VM Zulu21.34+19-CA (build 21.0.3+9-LTS, mixed mode, sharing)它也是支持 CDS 的。

          二、如何使用

          2.1 訓(xùn)練

          要使用它,您應(yīng)該首先以分解形式對應(yīng)用程序執(zhí)行訓(xùn)練運(yùn)行:

          $ java -Djarmode=tools -jar my-app.jar extract --destination application

          $
           cd application

          $
           java -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh -jar my-app.jar

          這將創(chuàng)建一個  application 目錄并生成 application.jsa,只要應(yīng)用程序未更新,就可以重復(fù)使用。

          2.2 使用

          要使用緩存,您需要在啟動應(yīng)用程序時添加一個額外的 -XX:SharedArchiveFile 參數(shù):

          $ java -XX:SharedArchiveFile=application.jsa -jar my-app.jar

          三、效果

          為了測試 CDS,筆者使用 Spring Boot initializr 生成了一個 demo 項目。下面是 CDS 訓(xùn)練后的 application 目錄的結(jié)構(gòu):

          $ tree application
          application
          |-- application.jsa
          |-- demo-0.0.1-SNAPSHOT.jar
          `-- lib
              |-- jackson-annotations-2.17.1.jar
              |-- jackson-core-2.17.1.jar
              |-- jackson-databind-2.17.1.jar
              |-- jackson-datatype-jdk8-2.17.1.jar
              |-- jackson-datatype-jsr310-2.17.1.jar
              |-- jackson-module-parameter-names-2.17.1.jar
              |-- jakarta.annotation-api-2.1.1.jar
              |-- jul-to-slf4j-2.0.13.jar
              |-- log4j-api-2.23.1.jar
              |-- log4j-to-slf4j-2.23.1.jar
              |-- logback-classic-1.5.6.jar
              |-- logback-core-1.5.6.jar
              |-- micrometer-commons-1.13.0.jar
              |-- micrometer-observation-1.13.0.jar
              |-- slf4j-api-2.0.13.jar
              |-- snakeyaml-2.2.jar
              |-- spring-aop-6.1.8.jar
              |-- spring-beans-6.1.8.jar
              |-- spring-boot-3.3.0.jar
              |-- spring-boot-autoconfigure-3.3.0.jar
              |-- spring-boot-jarmode-tools-3.3.0.jar
              |-- spring-context-6.1.8.jar
              |-- spring-core-6.1.8.jar
              |-- spring-expression-6.1.8.jar
              |-- spring-jcl-6.1.8.jar
              |-- spring-web-6.1.8.jar
              |-- spring-webmvc-6.1.8.jar
              |-- tomcat-embed-core-10.1.24.jar
              |-- tomcat-embed-el-10.1.24.jar
              `-- tomcat-embed-websocket-10.1.24.jar

          1 directory, 32 files

          3.1 直接運(yùn)行 demo-0.0.1-SNAPSHOT.jar

          $ java -jar demo-0.0.1-SNAPSHOT.jar
            .   ____          _            __ _ _
           /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
          ( ( )\___ | '
          _ | '_| | '_ \/ _` | \ \ \ \
           \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
            '  |____| .__|_| |_|_| |_\__, | / / / /
           =========|_|==============|___/=/_/_/_/

           :: Spring Boot ::                (v3.3.0)

          2024-05-31T08:53:39.964+08:00  INFO 14832 --- [demo] [           main] com.example.demo.DemoApplication         : Starting DemoApplication v0.0.1-SNAPSHOT using Java 21.0.3 with PID 14832 (D:\test\demo\target\demo-0.0.1-SNAPSHOT.jar started by L.cm in D:\test\demo\target)
          2024-05-31T08:53:39.967+08:00  INFO 14832 --- [demo] [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
          2024-05-31T08:53:40.893+08:00  INFO 14832 --- [demo] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8888 (http)
          2024-05-31T08:53:40.908+08:00  INFO 14832 --- [demo] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
          2024-05-31T08:53:40.908+08:00  INFO 14832 --- [demo] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.24]
          2024-05-31T08:53:40.948+08:00  INFO 14832 --- [demo] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
          2024-05-31T08:53:40.949+08:00  INFO 14832 --- [demo] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 921 ms
          2024-05-31T08:53:41.257+08:00  INFO 14832 --- [demo] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8888 (http) with context path '
          /'
          2024-05-31T08:53:41.274+08:00  INFO 14832 --- [demo] [           main] com.example.demo.DemoApplication         : Started DemoApplication in 1.702 seconds (process running for 2.143)

          我們可以在日志 Started DemoApplication in 1.702 seconds 看到啟動耗時為 1.702 秒。

          3.2 使用 CDS 運(yùn)行

          需要先 cd 到訓(xùn)練的 application 目錄。

          $ java -XX:SharedArchiveFile=application.jsa -jar demo-0.0.1-SNAPSHOT.jar
            .   ____          _            __ _ _
           /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
          ( ( )\___ | '
          _ | '_| | '_ \/ _` | \ \ \ \
           \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
            '  |____| .__|_| |_|_| |_\__, | / / / /
           =========|_|==============|___/=/_/_/_/

           :: Spring Boot ::                (v3.3.0)

          2024-05-31T08:53:15.828+08:00  INFO 21444 --- [demo] [           main] com.example.demo.DemoApplication         : Starting DemoApplication v0.0.1-SNAPSHOT using Java 21.0.3 with PID 21444 (D:\test\demo\target\application\demo-0.0.1-SNAPSHOT.jar started by L.cm in D:\test\demo\target\application)
          2024-05-31T08:53:15.830+08:00  INFO 21444 --- [demo] [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
          2024-05-31T08:53:16.244+08:00  INFO 21444 --- [demo] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8888 (http)
          2024-05-31T08:53:16.249+08:00  INFO 21444 --- [demo] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
          2024-05-31T08:53:16.249+08:00  INFO 21444 --- [demo] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.24]
          2024-05-31T08:53:16.272+08:00  INFO 21444 --- [demo] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
          2024-05-31T08:53:16.273+08:00  INFO 21444 --- [demo] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 419 ms
          2024-05-31T08:53:16.425+08:00  INFO 21444 --- [demo] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8888 (http) with context path '
          /'
          2024-05-31T08:53:16.431+08:00  INFO 21444 --- [demo] [           main] com.example.demo.DemoApplication         : Started DemoApplication in 0.722 seconds (process running for 0.885)

          我們可以在日志 Started DemoApplication in 0.722 seconds 看到啟動耗時比直接啟動少了將近 1 秒。效果還是非常明顯的。

          四、總結(jié)

          CDS、CRaC 和 GraalVM,這三種技術(shù)都有助于提高Java程序的啟動速度,但它們的應(yīng)用場景和優(yōu)化方式有所不同。CDS 通過共享類數(shù)據(jù)來加速啟動,CRaC 通過運(yùn)行時優(yōu)化來提升性能,而 GraalVM 則通過 AOT 編譯來實(shí)現(xiàn)快速啟動和高效運(yùn)行。作為開發(fā)者,我們可以根據(jù)具體需求選擇合適的技術(shù)來優(yōu)化 Java 程序的啟動時間。

          PIG AI | Java大模型應(yīng)用開發(fā)平臺重磅發(fā)布

          我們很高興向您介紹 PIG AI,一款創(chuàng)新的大語言模型(LLM)應(yīng)用開發(fā)平臺。PIG AI 結(jié)合了后端即服務(wù)(Backend as Service)和 LLMOps 的理念,使開發(fā)者能夠快速搭建生產(chǎn)級的生成式 AI 應(yīng)用。


          瀏覽 236
          1點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          1點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  2021国产精彩在线视频 | 久久黄免费 | 日韩一级中文字幕 | 亚洲欧美日韩动漫 | 欧美内射视频网站 |