操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    作者 |

    簡(jiǎn)介

    今天我們講講JDK9中的JVM GC調(diào)優(yōu)參數(shù),JDK9中JVM的參數(shù)總共有2142個(gè),其中正式的參數(shù)有659個(gè)。好像比JDK8中的參數(shù)要少一點(diǎn)。

    為了方便大家的參考,特意將JDK9中的GC參數(shù)總結(jié)成了一張PDF,這個(gè)PDF比之前總結(jié)的JDK8的PDF在排版,顏色和內(nèi)容準(zhǔn)確性上面又有了非常大的提升,歡迎大家下載。

    Oracle中的文檔

    今天這篇文章的內(nèi)容都是從Oracle JDK9的官方文檔中提煉出來(lái)的。對(duì)于里面的內(nèi)容的真實(shí)性,我不能保證是100%正確的。

    有人要問(wèn)了,官網(wǎng)文檔也會(huì)有錯(cuò)誤?

    這個(gè)問(wèn)題要從兩個(gè)方面說(shuō)起,第一方面,任何人都會(huì)犯錯(cuò)誤,雖然官網(wǎng)文檔經(jīng)過(guò)了編輯,校驗(yàn)核對(duì)然后才發(fā)布,但是總會(huì)有一些遺漏的地方。

    第二,Oracle的文檔是有專門的寫文檔的部門來(lái)專門編寫的,寫文檔就是他們的工作,所以,這些文檔并不是開發(fā)JDK的開發(fā)人員編寫的,而是和開發(fā)JDK不相關(guān)的文檔編寫員編寫的。

    至于文檔寫完之后有沒(méi)有JDK開發(fā)人員過(guò)目,大家可以自行腦補(bǔ)……

    所以古人說(shuō)得好,盡信書不如無(wú)書。

    JDK9中JVM參數(shù)的變化

    一代新人換舊人,長(zhǎng)江后浪推前浪。由來(lái)只有新人笑 有誰(shuí)聽(tīng)到舊人哭。

    JDK9出現(xiàn)了,那么JDK8中的一些參數(shù)自然需要退伍了。

    我們回想一下JDK9中有些什么變化呢?我總結(jié)一下有三個(gè)。

    1. 最大的變化就是引入了JPMS(Java Platform Module System)也就是Project Jigsaw。模塊化的本質(zhì)就是將一個(gè)大型的項(xiàng)目拆分成為一個(gè)一個(gè)的模塊,每個(gè)模塊都是獨(dú)立的單元,并且不同的模塊之間可以互相引用和調(diào)用。在module中會(huì)有元數(shù)據(jù)來(lái)描述該模塊的信息和該模塊與其他模塊之間的關(guān)系。這些模塊組合起來(lái),構(gòu)成了最后的運(yùn)行程序。
    2. 然后就是引入的Xlog日志服務(wù),通過(guò)Xlog日志服務(wù)我們可以監(jiān)控JVM中的事件,比如:GC,class loading,JPMS,heap,thread等等。
    3. 最后就是將String中的底層存儲(chǔ)從char數(shù)組換成了byte數(shù)組。

    這三個(gè)變化中和JVM最相關(guān)的就是第二個(gè)Xlog日志服務(wù)。

    廢棄的JVM選項(xiàng)

    -Xusealtsigs / -XX:+UseAltSigs

    這兩個(gè)選項(xiàng)在JDK9中被廢棄了,如果你不知道也沒(méi)關(guān)系,因?yàn)檫@兩個(gè)選項(xiàng)是在Oracle Solaris中專有的。現(xiàn)在用Solaris服務(wù)器的人應(yīng)該比較少了…..

    不推薦(Deprecated)的JVM選項(xiàng)

    下面這些選項(xiàng)是JVM已經(jīng)不再推薦使用了,如果你使用的話也沒(méi)問(wèn)題,但是會(huì)有報(bào)警。

    Deprecated表示這些選項(xiàng)會(huì)在未來(lái)被刪除,我們應(yīng)該盡量避免使用這些選項(xiàng)。

    選項(xiàng)有很多,我們挑一些比較常見(jiàn)和重要的來(lái)給大家講解一下。

    -d32 / -d64

    為什么這兩個(gè)參數(shù)會(huì)被不推薦呢?因?yàn)楝F(xiàn)在的服務(wù)器性能已經(jīng)非常非常的好了。

    如果你的JDK是64位的,那么默認(rèn)就啟用了-server和-d64模式,32位的JDK現(xiàn)在應(yīng)該很少見(jiàn)到了。

    Oracle官方文檔說(shuō)只有Java HotSpot Server VM才有64位的模式。不知道是真是假,因?yàn)槠渌腣M我也沒(méi)有用過(guò),沒(méi)有發(fā)言權(quán)。

    -Xloggc:garbage-collection.log

    因?yàn)镴DK9中引入Xlog框架,所以之前的日志輸出的參數(shù)都被替換成了新的Xlog格式:

    比如上面的命令被替換成為 -Xlog:gc:garbage-collection.log

    所以那些以Print開頭的GC日志輸出參數(shù)都是不推薦的。我們需要使用Xlog來(lái)替代。

    同樣的以Trace開頭的運(yùn)行時(shí)日志輸出參數(shù)也是不推薦的,也可以使用Xlog來(lái)替代。

    -XX:+UseConcMarkSweepGC / -XX:CMS*

    CMS在JDK9中是不被推薦的,所以CMS開頭的參數(shù)都不要用了。

    -XX:+UseParNewGC

    因?yàn)镻arNewGC是和CMS一起使用的,所以CMS不推薦之后,ParNewGC也是不推薦使用的。

    -XX:MaxPermSize=size / -XX:PermSize=size

    JDK8中,Prem區(qū)已經(jīng)被移到了Metaspace,所以上面的參數(shù)可以被下面的替代:

    -XX:MaxMetaspaceSize=size / -XX:MetaspaceSize=size

    被刪除的JVM參數(shù)

    -Xincgc

    增量GC在JDK9中被刪除了。

    -Xmaxjitcodesize=size JIT中最大的code cache大小被替換成 -XX:ReservedCodeCacheSize。

    還有其他的一些CMS的參數(shù)。

    JDK9的新特性Application Class Data Sharing

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

    通常來(lái)說(shuō),如果要執(zhí)行class字節(jié)碼,JVM需要執(zhí)行下面的一些步驟:給定一個(gè)類的名字,JVM需要從磁盤上面找到這個(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包中的類的數(shù)據(jù)始終是相同的。JVM在啟動(dòng)時(shí)候每次都會(huì)運(yùn)行相同的加載步驟。

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

    下面是AppCDS的大概工作流程:

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

    相應(yīng)的VM參數(shù)如下:

    JDK9的新特性Xlog

    在java程序中,我們通過(guò)日志來(lái)定位和發(fā)現(xiàn)項(xiàng)目中可能出現(xiàn)的問(wèn)題。在現(xiàn)代java項(xiàng)目中,我們使用log4j或者slf4j,Logback等日志記錄框架來(lái)處理日志問(wèn)題。

    JVM是java程序運(yùn)行的基礎(chǔ),JVM中各種事件比如:GC,class loading,JPMS,heap,thread等等其實(shí)都可以有日志來(lái)記錄。通過(guò)這些日志,我們可以監(jiān)控JVM中的事件,并可以依次來(lái)對(duì)java應(yīng)用程序進(jìn)行調(diào)優(yōu)。

    在JDK9中引入的Xlog日志服務(wù)就是為這個(gè)目的而創(chuàng)建的。

    通過(guò)xlog,JDK將JVM中的各種事件統(tǒng)一起來(lái),以統(tǒng)一的形式對(duì)外輸出。通過(guò)tag參數(shù)來(lái)區(qū)分子系統(tǒng),通過(guò)log level來(lái)區(qū)分事件的緊急性,通過(guò)logging output來(lái)配置輸出的地址。

    在JDK9之后,之前的Print*參數(shù)都被Xlog所代替了。

    我們看下常用的Xlog和GC日志參數(shù):

    JDK9中的G1參數(shù)

    作為JDK9中的默認(rèn)垃圾回收器G1,對(duì)G1的調(diào)優(yōu)是必不可少的。下面是G1的參數(shù):

    JDK9中的通用VM參數(shù)

    下面是通用的VM參數(shù):

    JDK9中的通用GC參數(shù)

    下面是JDK9中的通用GC參數(shù):

    JDK9中的內(nèi)存調(diào)整參數(shù)

    下面是JDK9中的內(nèi)存調(diào)整參數(shù):

    總結(jié)

    千言萬(wàn)語(yǔ)不如一張PDF。我把JDK9的GC參數(shù)總結(jié)成了一張PDF,下面是PDF的下載鏈接。

    https://github.com/ddean2009/www.flydean.com/blob/master/cheatSheet/JDK9GC-cheatsheet.pdf

    歡迎大家下載。

    本文作者:flydean程序那些事

    本文鏈接:http://www.flydean.com/jdk9-gc-cheatsheet/

    本文來(lái)源:flydean的博客

    歡迎關(guān)注我的公眾號(hào):程序那些事,更多精彩等著您!

網(wǎng)站首頁(yè)   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號(hào):冀ICP備2024067069號(hào)-3 北京科技有限公司版權(quán)所有