資源描述:
《jvmgc管理及調(diào)優(yōu)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、JVM系列三:JVM參數(shù)設(shè)置、分析不管是YGC還是FullGC,GC過程中都會對導(dǎo)致程序運行中中斷,正確的選擇不同的GC策略,調(diào)整JVM、GC的參數(shù),可以極大的減少由于GC工作,而導(dǎo)致的程序運行中斷方面的問題,進而適當?shù)奶岣逬ava程序的工作效率。但是調(diào)整GC是以個極為復(fù)雜的過程,由于各個程序具備不同的特點,如:web和GUI程序就有很大區(qū)別(Web可以適當?shù)耐nD,但GUI停頓是客戶無法接受的),而且由于跑在各個機器上的配置不同(主要cup個數(shù),內(nèi)存不同),所以使用的GC種類也會不同(如何選擇見GC種類及如何選擇)。本文
2、將注重介紹JVM、GC的一些重要參數(shù)的設(shè)置來提高系統(tǒng)的性能。??????JVM內(nèi)存組成及GC相關(guān)內(nèi)容請見之前的文章:JVM內(nèi)存組成?GC策略&內(nèi)存申請。JVM參數(shù)的含義?實例見實例分析參數(shù)名稱含義默認值?-Xms初始堆大小物理內(nèi)存的1/64(<1GB)默認(MinHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制.-Xmx最大堆大小物理內(nèi)存的1/4(<1GB)默認(MaxHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存大于70%時,JVM會減少堆直到-Xms的最小限制
3、-Xmn年輕代大小(1.4orlator)?注意:此處的大小是(eden+2survivorspace).與jmap-heap中顯示的Newgen是不同的。整個堆大小=年輕代大小+年老代大小+持久代大小.增大年輕代后,將會減小年老代大小.此值對系統(tǒng)性能影響較大,Sun官方推薦配置為整個堆的3/8-XX:NewSize設(shè)置年輕代大小(for1.3/1.4)??-XX:MaxNewSize年輕代最大值(for1.3/1.4)??-XX:PermSize設(shè)置持久代(permgen)初始值物理內(nèi)存的1/64?-XX:MaxPer
4、mSize設(shè)置持久代最大值物理內(nèi)存的1/4?-Xss每個線程的堆棧大小?JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K.更具應(yīng)用的線程所需內(nèi)存大小進行調(diào)整.在相同物理內(nèi)存下,減小這個值能生成更多的線程.但是操作系統(tǒng)對一個進程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗值在3000~5000左右一般小的應(yīng)用,如果棧不是很深,應(yīng)該是128k夠用的大的應(yīng)用建議使用256k。這個選項對性能影響比較大,需要嚴格的測試。(校長)和threadstacksize選項解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣
5、一句話:"”-XssistranslatedinaVMflagnamedThreadStackSize”一般設(shè)置這個值就可以了。-XX:ThreadStackSizeThreadStackSize?(0meansusedefaultstacksize)[Sparc:512;Solarisx86:320(was256priorin5.0andearlier);Sparc64bit:1024;Linuxamd64:1024(was0in5.0andearlier);allothers0.]-XX:NewRatio年輕代(包括
6、Eden和兩個Survivor區(qū))與年老代的比值(除去持久代)?-XX:NewRatio=4表示年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5Xms=Xmx并且設(shè)置了Xmn的情況下,該參數(shù)不需要進行設(shè)置。-XX:SurvivorRatioEden區(qū)與Survivor區(qū)的大小比值?設(shè)置為8,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:8,一個Survivor區(qū)占整個年輕代的1/10-XX:LargePageSizeInBytes內(nèi)存頁的大小不可設(shè)置過大,會影響Perm的大小?=128m-XX:+UseFa
7、stAccessorMethods原始類型的快速優(yōu)化??-XX:+DisableExplicitGC關(guān)閉System.gc()?這個參數(shù)需要嚴格的測試-XX:MaxTenuringThreshold垃圾最大年齡?如果設(shè)置為0的話,則年輕代對象不經(jīng)過Survivor區(qū),直接進入年老代.對于年老代比較多的應(yīng)用,可以提高效率.如果將此值設(shè)置為一個較大值,則年輕代對象會在Survivor區(qū)進行多次復(fù)制,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概率該參數(shù)只有在串行GC時才有效.-XX:+AggressiveOpt
8、s加快編譯??-XX:+UseBiasedLocking鎖機制的性能改善??-Xnoclassgc禁用垃圾回收??-XX:SoftRefLRUPolicyMSPerMB每兆堆空閑空間中SoftReference的存活時間1ssoftlyreachableobjectswillremainaliveforsomeamo