最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK13的新特性之AppCDS詳解

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

簡介

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

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

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

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

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

基本步驟

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

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

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

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

JDK class文件歸檔

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

下面的例子專門用于JDK10和JDK11。

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

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

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

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

生成的文件大概有12M,接下來我們就可以使用這個JSA文件來啟動java程序了。

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

我們先寫一個可以運行的CDS hello world:

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

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

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

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

-XX:SharedArchiveFile表示使用哪個具體的jsa文件來運行java程序。

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

簡單查看一下生產(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/

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

運行時間對比

我們可以簡單的使用time命令來對兩種情況進(jìn)行一下對比,看具體的運行時間差別:

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只是一個簡單的例子,可能兩者的區(qū)別還不是特別明顯。

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

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

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

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

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

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

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

我們可以得到類似下面的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

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

JDK13的新用法

在JDK13,一切都變得簡單了,只需要一個-XX:ArchiveClassesAtExit就好:

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

JVM將會在退出時生成jsa文件。

總結(jié)

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

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

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

相關(guān)文章

  • IDEA編寫JavaWeb出現(xiàn)亂碼問題解決方案

    IDEA編寫JavaWeb出現(xiàn)亂碼問題解決方案

    這篇文章主要介紹了IDEA編寫JavaWeb出現(xiàn)亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 利用Spring插件實現(xiàn)策略模式的案例詳解

    利用Spring插件實現(xiàn)策略模式的案例詳解

    Spring插件提供了一種更實用的插件開發(fā)方法,它提供了插件實現(xiàn)擴(kuò)展核心系統(tǒng)功能的核心靈活性,但當(dāng)然不提供核心OSGi功能,如動態(tài)類加載或運行時安裝和部署插件,本文就來聊下如何使用spring插件來實現(xiàn)策略模式,需要的朋友可以參考下
    2023-05-05
  • Spring Boot項目@RestController使用重定向redirect方式

    Spring Boot項目@RestController使用重定向redirect方式

    這篇文章主要介紹了Spring Boot項目@RestController使用重定向redirect方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java中Scanner類的簡單用法分享

    java中Scanner類的簡單用法分享

    這篇文章主要介紹了java中Scanner類的簡單用法,有需要的朋友可以參考一下
    2014-01-01
  • Java中LinkedList真的是查找慢增刪快

    Java中LinkedList真的是查找慢增刪快

    這篇文章主要介紹了Java中LinkedList真的是查找慢增刪快,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java單例模式、饑餓模式代碼實例

    Java單例模式、饑餓模式代碼實例

    這篇文章主要介紹了Java單例模式、饑餓模式代碼實例,本文直接給出代碼實例,需要的朋友可以參考下
    2015-05-05
  • 深入理解Java中的并發(fā)工具類CountDownLatch

    深入理解Java中的并發(fā)工具類CountDownLatch

    CountDownLatch?作為?Java?中的一個同步工具類,用于在多線程間實現(xiàn)協(xié)調(diào)和控制,本文主要來和大家講解一下JUC?工具類?CountDownLatch的使用,需要的可以參考一下
    2023-07-07
  • Java?json轉(zhuǎn)換實體類(JavaBean)及實體類(JavaBean)轉(zhuǎn)換json代碼示例

    Java?json轉(zhuǎn)換實體類(JavaBean)及實體類(JavaBean)轉(zhuǎn)換json代碼示例

    這篇文章主要介紹了兩種常見的JSON與Java實體類相互轉(zhuǎn)換的方法,分別是使用庫Jackson、Gson、Fastjson和在線工具,無論是將JSON轉(zhuǎn)換為Java實體類還是將Java實體類轉(zhuǎn)換為JSON,這些方法都能顯著簡化開發(fā)過程,需要的朋友可以參考下
    2024-12-12
  • Java幾種常用JSON庫性能比較詳解

    Java幾種常用JSON庫性能比較詳解

    這篇文章主要介紹了Java幾種常用JSON庫性能比較詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Java 中的 File類詳情

    Java 中的 File類詳情

    這篇文章主要介紹了Java 中的 File類,對于File而言,其封裝的并不是一個真正存在的文件,僅僅是一個路徑名而已,下面我們來看看文章對File類的詳情介紹吧,需要的朋友也可以參考一下
    2021-11-11

最新評論

上蔡县| 九龙城区| 延津县| 淮南市| 吉隆县| 贡觉县| 永泰县| 辉南县| 同心县| 安阳县| 敦化市| 黄石市| 南皮县| 博白县| 武安市| 舟山市| 乡城县| 原平市| 肃南| 那曲县| 河东区| 新乡市| 武邑县| 赤壁市| 汽车| 巴南区| 仙桃市| 延寿县| 米泉市| 惠安县| 济源市| 剑河县| 荔浦县| 陵水| 咸丰县| 北碚区| 偏关县| 泰来县| 鹰潭市| 杭锦后旗| 天台县|