亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JDK13的新特性之AppCDS詳解

 更新時(shí)間:2020年05月12日 09:06:45   作者:flydean  
AppCDS的全稱(chēng)是Application Class-Data Sharing。主要是用來(lái)在不同的JVM中共享Class-Data信息,從而提升應(yīng)用程序的啟動(dòng)速度。這篇文章主要介紹了JDK13的新特性:AppCDS詳解,需要的朋友可以參考下

簡(jiǎn)介

AppCDS的全稱(chēng)是Application Class-Data Sharing。主要是用來(lái)在不同的JVM中共享Class-Data信息,從而提升應(yīng)用程序的啟動(dòng)速度。

通常來(lái)說(shuō),如果要執(zhí)行class字節(jié)碼,JVM需要執(zhí)行下面的一些步驟:給定一個(gè)類(lèi)的名字,JVM需要從磁盤(pán)上面找到這個(gè)文件,加載,并驗(yàn)證字節(jié)碼,最后將它加載進(jìn)來(lái)。

如果JVM啟動(dòng)的時(shí)候需要加載成百上千個(gè)class,那么需要的就不是一個(gè)小數(shù)目了。

對(duì)于打包好的jar包來(lái)說(shuō),只要jar的內(nèi)容不變,那么jar包中的類(lèi)的數(shù)據(jù)始終是相同的。JVM在啟動(dòng)時(shí)候每次都會(huì)運(yùn)行相同的加載步驟。

AppCDS的作用就是將這些能夠共享的數(shù)據(jù)歸類(lèi)成一個(gè)存儲(chǔ)文件,在不同的JVM中共享。

基本步驟

對(duì)AppCDS有了基本的了解之后,我們講一下AppCDS的大概工作流程:

  • 選擇要?dú)w檔的class,并創(chuàng)建一個(gè)class的列表,用在歸檔中。( -XX:DumpLoadedClassList)
  • 創(chuàng)建歸檔文件(-Xshare:dump和-XX:SharedArchiveFile)
  • 使用歸檔文件(-Xshare:on 和 -XX:SharedArchiveFile)

新的JVM可以使用歸檔文件來(lái)啟動(dòng),從而減少了class加載的步驟。同時(shí)加載到內(nèi)存中的區(qū)域甚至可以在其他的JVM實(shí)例中共享。從而極大的提高了JVM的啟動(dòng)速度。

下面我們從JDK class文件歸檔和應(yīng)用程序class文件歸檔兩個(gè)方面來(lái)講解AppCDS的具體使用。

JDK class文件歸檔

最簡(jiǎn)單的AppCDS的例子就是歸檔JDK的class文件。JDK12,JDK13默認(rèn)情況下已經(jīng)開(kāi)啟了AppCDS的支持。如果需要停用,我們可以添加 -Xshare:off。

下面的例子專(zhuān)門(mén)用于JDK10和JDK11。

創(chuàng)建JDK class-data archive

我們可以使用-Xshare:dump來(lái)創(chuàng)建JVM啟動(dòng)時(shí)候默認(rèn)加載的Class-Data:

java -Xshare:dump -XX:SharedArchiveFile=/tmp/sharedarchive.jsa

上面我們添加了參數(shù)-XX:SharedArchiveFile,為默認(rèn)情況下java shared archive file文件會(huì)創(chuàng)建在JAVA_HOME/lib/server/下面,這個(gè)是需要root權(quán)限才能寫(xiě)入的。為了方便起見(jiàn),我們手動(dòng)指定了一個(gè)有讀寫(xiě)權(quán)限的目錄。

生成的文件大概有12M,接下來(lái)我們就可以使用這個(gè)JSA文件來(lái)啟動(dòng)java程序了。

使用JDK class-data archive啟動(dòng)應(yīng)用程序

我們先寫(xiě)一個(gè)可以運(yùn)行的CDS hello world:

public class CDSHelloWorld {
 public static void main(String[] args) {
  System.out.println("CDS Hello World");
 }
}

編譯之后,我們運(yùn)行下面的命令來(lái)使用上面創(chuàng)建的jsa文件:

java -Xlog:class+load:file=/tmp/sharedarchive.log -XX:SharedArchiveFile=/tmp/sharedarchive.jsa --enable-preview CDSHelloWorld

上面的命令添加了兩個(gè)運(yùn)行時(shí)參數(shù):

-XX:SharedArchiveFile表示使用哪個(gè)具體的jsa文件來(lái)運(yùn)行java程序。

-Xlog:class+load:file主要是做調(diào)試用的,將會(huì)把JVM的class load信息輸出到指定的文件中,方便我們查看。這個(gè)unified logging特性是在JDK9中添加的,后面我們也會(huì)詳細(xì)介紹。

簡(jiǎn)單查看一下生產(chǎn)的log文件:

[0.010s][info][class,load] opened: /Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home/lib/modules
[0.017s][info][class,load] java.lang.Object source: shared objects file
[0.017s][info][class,load] java.io.Serializable source: shared objects file
[0.017s][info][class,load] java.lang.Comparable source: shared objects file
...
[0.056s][info][class,load] CDSHelloWorld source: file:/Users/learn-java-base-9-to-14/java-13/target/classes/

從生成的日志文件我們可以看到,除了自己寫(xiě)的java文件,其他的java class都是從shared objects file中加載的。

運(yùn)行時(shí)間對(duì)比

我們可以簡(jiǎn)單的使用time命令來(lái)對(duì)兩種情況進(jìn)行一下對(duì)比,看具體的運(yùn)行時(shí)間差別:

time java -Xlog:class+load:file=/tmp/sharedarchive.log -XX:SharedArchiveFile=/tmp/sharedarchive.jsa --enable-preview CDSHelloWorld 
CDS Hello World
java -Xlog:class+load:file=/tmp/sharedarchive.log --enable-preview 

0.06s user 
0.06s system 
77% cpu 
0.164 total
time java --enable-preview CDSHelloWorld 
CDS Hello World
java --enable-preview CDSHelloWorld 

0.09s user 
0.06s system 
66% cpu 
0.222 total

HelloWorld只是一個(gè)簡(jiǎn)單的例子,可能兩者的區(qū)別還不是特別明顯。

如果是大型的項(xiàng)目,處理JDK自帶的class之外,我們還可以將項(xiàng)目中共享的模塊做成jsa文件,從而提升啟動(dòng)速度。

應(yīng)用程序class文件歸檔

應(yīng)用程序class文件歸檔和上面講的JDK class文件歸檔很類(lèi)似?;静襟E就是:1.列出運(yùn)行應(yīng)用程序時(shí)需要加載的class文件。2.將這class文件歸檔。

在JDK13之前,我們需要兩步才能生成jsa文件。在JDK13之后,只需要一個(gè)命令就行了。

生成應(yīng)用程序加載class的列表

我們可以使用XX:DumpLoadedClassList來(lái)生成應(yīng)用程序加載class的列表:

java -XX:DumpLoadedClassList=/tmp/classes.lst --enable-preview CDSHelloWorld

我們可以得到類(lèi)似下面的class文件列表:

java/lang/Object
java/io/Serializable
java/lang/Comparable
java/lang/CharSequence
java/lang/constant/Constable
java/lang/constant/ConstantDesc

使用class文件列表生成jsa文件

有了class文件列表,我們就可以生成jsa文件了:

java -Xshare:dump -XX:SharedArchiveFile=/tmp/sharedarchive.jsa -XX:SharedClassListFile=/tmp/classes.lst 
--enable-preview CDSHelloWorld

跟之前的例子一樣,只不過(guò)多了一個(gè)-XX:SharedClassListFile參數(shù)。

JDK13的新用法

在JDK13,一切都變得簡(jiǎn)單了,只需要一個(gè)-XX:ArchiveClassesAtExit就好:

java -XX:ArchiveClassesAtExit=/tmp/sharedarchive.jsa --enable-preview CDSHelloWorld

JVM將會(huì)在退出時(shí)生成jsa文件。

總結(jié)

AppCDS是一個(gè)新特性,在特別關(guān)注java啟動(dòng)時(shí)間的情況下可以考慮使用。

本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

到此這篇關(guān)于JDK13的新特性:AppCDS詳解的文章就介紹到這了,更多相關(guān)JDK13的新特性:AppCDS詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 繼承JpaRepository后,找不到findOne()方法的解決

    繼承JpaRepository后,找不到findOne()方法的解決

    這篇文章主要介紹了繼承JpaRepository后,找不到findOne()方法的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring中的自定義NamespaceHandler詳解

    Spring中的自定義NamespaceHandler詳解

    這篇文章主要介紹了Spring中的自定義NamespaceHandler詳解,通常情況下,Spring生態(tài)圈提供的功能已足夠使用,但不排除特殊情況下,需要匹配特殊及復(fù)雜的業(yè)務(wù)情況,Spring提供了可擴(kuò)展Schema支持,可以自定義命名空間進(jìn)行配置及解析,需要的朋友可以參考下
    2023-11-11
  • 基于Docker的K8s(Kubernetes)集群部署方案

    基于Docker的K8s(Kubernetes)集群部署方案

    這篇文章主要介紹了基于Docker的K8s(Kubernetes)集群部署方案,文中介紹了安裝k8s的可視化界面的相關(guān)操作,需要的朋友可以參考下
    2024-01-01
  • Java中Maven的依賴(lài)管理問(wèn)題小結(jié)

    Java中Maven的依賴(lài)管理問(wèn)題小結(jié)

    這篇文章主要介紹了Java中Maven的依賴(lài)管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-05-05
  • Java框架之Maven SSM集合

    Java框架之Maven SSM集合

    本篇文章主要介紹了基于maven的ssm框架整合的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • Java線程監(jiān)聽(tīng),意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法

    Java線程監(jiān)聽(tīng),意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇Java線程監(jiān)聽(tīng),意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Gradle構(gòu)建基本的Web項(xiàng)目結(jié)構(gòu)

    Gradle構(gòu)建基本的Web項(xiàng)目結(jié)構(gòu)

    這篇文章主要為大家介紹了Gradle創(chuàng)建Web項(xiàng)目基本的框架結(jié)構(gòu)搭建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • SpringBoot整合WebSocket實(shí)現(xiàn)后端向前端發(fā)送消息的實(shí)例代碼

    SpringBoot整合WebSocket實(shí)現(xiàn)后端向前端發(fā)送消息的實(shí)例代碼

    WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合WebSocket實(shí)現(xiàn)后端向前端發(fā)送消息的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    本文主要介紹了SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • 如何去掉IntelliJ IDEA中mybatis對(duì)應(yīng)的xml文件警告

    如何去掉IntelliJ IDEA中mybatis對(duì)應(yīng)的xml文件警告

    這篇文章主要介紹了如何去掉IntelliJ IDEA中mybatis對(duì)應(yīng)的xml文件警告問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論