JVM-調(diào)優(yōu)參數(shù)講解

垃圾收集器

堆配置

-Xms :初始堆大小
-Xmx :最大堆大小
-XX:NewSize=n :設(shè)置年輕代大小
-XX:NewRatio=n: 設(shè)置年輕代和年老代的比值。如:為3,表示年輕代與年老代比值為1:3,年輕代占整個(gè)年輕代年老代和的1/4
-XX:SurvivorRatio=n :年輕代中Eden區(qū)與兩個(gè)Survivor區(qū)的比值。注意Survivor區(qū)有兩個(gè)。如:3,表示Eden:Survivor=3:2,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/5
-XX:MaxPermSize=n :設(shè)置持久代大小
-Xmn,設(shè)置JVM年輕代內(nèi)存;比如 -Xmn1G:設(shè)置年輕代內(nèi)存為 1 G
-XX:HeapDumpOnOutOfMemoryError,設(shè)置虛擬機(jī)出現(xiàn)內(nèi)存溢出異常時(shí) Dump 出當(dāng)前內(nèi)存堆轉(zhuǎn)儲(chǔ)快照,以便事后進(jìn)行分析。
(Dump 文件存放于項(xiàng)目根目錄,*.hprof 文件,)

棧配置

-Xss256K: 設(shè)置每個(gè)線程的運(yùn)行時(shí)棧的大小為 256K

并行收集器配置

-XX:ParallelGCThreads=n :設(shè)置并行收集器收集時(shí)使用的CPU數(shù)。并行收集線程數(shù)
-XX:MaxGCPauseMillis=n :設(shè)置并行收集最大暫停時(shí)間
-XX:GCTimeRatio=n :設(shè)置垃圾回收時(shí)間占程序運(yùn)行時(shí)間的百分比。公式為1/(1+n)

并發(fā)收集器配置

-XX:+CMSIncrementalMode :設(shè)置為增量模式。適用于單CPU情況
-XX:ParallelGCThreads=n :設(shè)置并發(fā)收集器年輕代收集方式為并行收集時(shí),使用的CPU數(shù)。并行收集線程數(shù)

永久代配置

JDK8開始,永久代(PermGen)的概念被廢棄掉了,取而代之的是一個(gè)稱為Metaspace的存儲(chǔ)空間。Metaspace使用的是本地內(nèi)存,而不是堆內(nèi)存,也就是說在默認(rèn)情況下Metaspace的大小只與本地內(nèi)存大小有關(guān)。

-XX:MetaspaceSize=N
這個(gè)參數(shù)是初始化的Metaspace大小,該值越大觸發(fā)Metaspace GC的時(shí)機(jī)就越晚。隨著GC的到來(lái),虛擬機(jī)會(huì)根據(jù)實(shí)際情況調(diào)控Metaspace的大小,可能增加上線也可能降低。在默認(rèn)情況下,這個(gè)值大小根據(jù)不同的平臺(tái)在12M到20M浮動(dòng)。使用java -XX:+PrintFlagsInitial命令查看本機(jī)的初始化參數(shù),-XX:Metaspacesize為21810376B(大約20.8M)。
-XX:MaxMetaspaceSize=N
這個(gè)參數(shù)用于限制Metaspace增長(zhǎng)的上限,防止因?yàn)槟承┣闆r導(dǎo)致Metaspace無(wú)限的使用本地內(nèi)存,影響到其他程序。在本機(jī)上該參數(shù)的默認(rèn)值為4294967295B(大約4096MB)。
-XX:MinMetaspaceFreeRatio=N
當(dāng)進(jìn)行過Metaspace GC之后,會(huì)計(jì)算當(dāng)前Metaspace的空閑空間比,如果空閑比小于這個(gè)參數(shù),那么虛擬機(jī)將增長(zhǎng)Metaspace的大小。在本機(jī)該參數(shù)的默認(rèn)值為40,也就是40%。設(shè)置該參數(shù)可以控制Metaspace的增長(zhǎng)的速度,太小的值會(huì)導(dǎo)致Metaspace增長(zhǎng)的緩慢,Metaspace的使用逐漸趨于飽和,可能會(huì)影響之后類的加載。而太大的值會(huì)導(dǎo)致Metaspace增長(zhǎng)的過快,浪費(fèi)內(nèi)存。
-XX:MaxMetasaceFreeRatio=N
當(dāng)進(jìn)行過Metaspace GC之后, 會(huì)計(jì)算當(dāng)前Metaspace的空閑空間比,如果空閑比大于這個(gè)參數(shù),那么虛擬機(jī)會(huì)釋放Metaspace的部分空間。在本機(jī)該參數(shù)的默認(rèn)值為70,也就是70%。
-XX:MaxMetaspaceExpansion=N
Metaspace增長(zhǎng)時(shí)的最大幅度。在本機(jī)上該參數(shù)的默認(rèn)值為5452592B(大約為5MB)。
-XX:MinMetaspaceExpansion=N
Metaspace增長(zhǎng)時(shí)的最小幅度。在本機(jī)上該參數(shù)的默認(rèn)值為340784B(大約330KB為)。

GC日志輸出配置參數(shù)

-XX:+PrintGC 輸出GC日志
-XX:+PrintGCDetails 輸出GC的詳細(xì)日志
-XX:+PrintGCTimeStamps 輸出GC的時(shí)間戳(以基準(zhǔn)時(shí)間的形式)
-XX:+PrintGCDateStamps 輸出GC的時(shí)間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在進(jìn)行GC的前后打印出堆的信息
-Xloggc:E:/logs/jvmlog/gc.log 日志文件的輸出路徑
-verbose:gc -XX:+PrintGCDetails 打印到控制臺(tái)


常用配置:
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCTimeStamps
-verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio=8

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文閱讀 前言 這段時(shí)間懈怠了,罪過! 最近看到有同事也開始用上了微信公眾號(hào)寫博客了,挺好的~給他們點(diǎn)贊,這博客我...
    碼農(nóng)戲碼閱讀 6,144評(píng)論 2 31
  • Java 虛擬機(jī)有自己完善的硬件架構(gòu), 如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。JVM 屏蔽了與具體操作系...
    尹小凱閱讀 1,747評(píng)論 0 10
  • http://www.cnblogs.com/angeldevil/p/3801189.html值得一看 Clas...
    snail_knight閱讀 1,610評(píng)論 1 0
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方,同時(shí)不同JDK版本的...
    高廣超閱讀 16,040評(píng)論 3 83
  • 與其說愿意跟時(shí)間做朋友嗎,不如說,時(shí)間愿意跟我做朋友嗎? 我們都愿意做時(shí)間的朋友 我們先來(lái)看,什么人肯定和時(shí)間做不...
    A霄_霄閱讀 474評(píng)論 0 1

友情鏈接更多精彩內(nèi)容