垃圾回收器的暫停問(wèn)題對(duì)實(shí)時(shí)響應(yīng)要求較高的服務(wù)來(lái)說(shuō),一直是個(gè)痛點(diǎn), CMS和G1等主流垃圾回收器的數(shù)十毫秒乃至上百毫秒的暫停時(shí)間相當(dāng)致命。此外,調(diào)優(yōu)門檻也相對(duì)較高,需要對(duì)垃圾回收器的內(nèi)部機(jī)制有一定的了解,才能夠進(jìn)行有效的調(diào)優(yōu)。隨著ZGC的出現(xiàn), 使得這一痛點(diǎn)徹底解決, ZGC 最初在 JDK 11 中作為實(shí)驗(yàn)性功能引入,并在 JDK 15 中宣布為生產(chǎn)就緒, 由于 JDK17 才是比較正式提供給大眾實(shí)用的LTS支持版本,而且一部分公司已經(jīng)在使用,所以本文力推 JDK17。
ZGC 作為一款低延遲垃圾收集器,旨在滿足以下目標(biāo):
低延遲的業(yè)務(wù)需求,毫秒級(jí)耗時(shí)的 GC
據(jù)美團(tuán)的開(kāi)發(fā)說(shuō):
在 Zeus 服務(wù)不同集群中,ZGC 在低延遲(TP999 < 200ms)場(chǎng)景中收益較大:
可以忽略的升級(jí) JDK17 的理由:
暫不推薦場(chǎng)景:定時(shí)任務(wù)、批量任務(wù)、高 CPU 密集型應(yīng)用。
話不多說(shuō),先看效果。
環(huán)境:
CPU:4cMem: 6GB
G1 參數(shù):
-Xmx3500m -Xms3500m -XX:+UseG1GC -XX:MaxGCPauseMillis=100-XX:G1ReservePercent=10 -XX:ConcGCThreads=2 -XX:ParallelGCThreads=5-XX:G1HeapRegionSize=16m -XX:MaxTenuringThreshold=14-XX:SurvivorRatio=8
ZGC 參數(shù):
--add-opens=java.base/java.lang=ALL-UNNAMED -Xms3500m -Xmx3500m -XX:ReservedCodeCacheSize=256m -XX:InitialCodeCacheSize=256m -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:ConcGCThreads=1 -XX:ParallelGCThreads=3 -XX:ZCollectionInterval=60 -XX:ZAllocationSpikeTolerance=4 -XX:+UnlockDiagnosticVMOptions -XX:-ZProactive -Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/gc-%t.log:time,tid,tags:filecount=5,filesize=50m
上述兩個(gè)參數(shù),均已經(jīng)在生產(chǎn)環(huán)境實(shí)驗(yàn)過(guò), 生產(chǎn)環(huán)境的機(jī)器是單機(jī)擁有 1500 業(yè)務(wù) tps 的機(jī)器。
圖片
從上圖可見(jiàn), GC 耗時(shí)是有著質(zhì)的區(qū)別的,這個(gè)區(qū)別是你用 CMS、Parallel GC、 G1 等嘔心瀝血也調(diào)校不出來(lái)的。
這么短的GC, 可以保證,應(yīng)用因?yàn)镴VM層面的卡頓都保持在 1ms 以內(nèi), 這也是為啥說(shuō)這點(diǎn)才是不能拒絕的理由。
從 CPU 使用上看, JDK17 相同的代碼, 比 JDK8 要高出 10 ~ 20%
使用 JDK17 前必須要安裝 JDK17, 對(duì)于不同的 Linux 發(fā)行版或者操作系統(tǒng)安裝方法各不相同, 下面給出了一些樣例, 僅供參考。
# ubuntu 安裝jdk17sudo apt install openjdk-17-jdk# docker 基礎(chǔ)鏡像docker pull openjdk:17-slimdocker pull openjdk:17-jdk-oraclelinux7FROM openjdk:17-slim
有了 JDK17 后,已經(jīng)具備了讓你的 Java 程序運(yùn)行在 JDK17 上的基本條件了,下一步便是配置 JVM 參數(shù)如下(有需要的話,可以自行把換行整理下):
--add-opens=java.base/java.lang=ALL-UNNAMED /-Xms1500m -Xmx1500m /-XX:ReservedCodeCacheSize=256m /-XX:InitialCodeCacheSize=256m / -XX:+UnlockExperimentalVMOptions /-XX:+UseZGC /-XX:Cnotallow=1 -XX:ParallelGCThreads=2 /-XX:ZCollectinotallow=30 -XX:ZAllocatinotallow=5 /-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive /-Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/gc-%t.log:time,tid,tags:filecount=5,filesize=50m /-XX:+HeapDumpOnOutOfMemoryError /-XX:HeapDumpPath=/opt/errorDump.hprof
圖片
本文鏈接:http://www.www897cc.com/showinfo-26-91523-0.html新項(xiàng)目為什么建議你使用 JDK17,一文告訴你升級(jí)的方法和不可拒絕的理由!
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com