Java虚拟机学习(5):内存调优
JVM調(diào)優(yōu)主要是針對(duì)內(nèi)存管理方面的調(diào)優(yōu),包括控制各個(gè)代的大小,GC策略。由于GC開始垃圾回收時(shí)會(huì)掛起應(yīng)用線程,嚴(yán)重影響了性能,調(diào)優(yōu)的目是為了盡量降低GC所導(dǎo)致的應(yīng)用線程暫停時(shí)間、 減少Full GC次數(shù)。
代大小調(diào)優(yōu)
最關(guān)鍵參數(shù):-Xms、?-Xmx 、-Xmn 、-XX:SurvivorRatio、-XX:MaxTenuringThreshold、-XX:PermSize、-XX:MaxPermSize
-Xms、?-Xmx 通常設(shè)置為相同的值,避免運(yùn)行時(shí)要不斷擴(kuò)展JVM內(nèi)存,這個(gè)值決定了JVM heap所能使用的最大內(nèi)存。
-Xmn 決定了新生代空間的大小,新生代Eden、S0、S1三個(gè)區(qū)域的比率可以通過(guò)-XX:SurvivorRatio來(lái)控制(假如值為 4 ?表示:Eden:S0:S1 = 4:3:3 )
-XX:MaxTenuringThreshold 控制對(duì)象在經(jīng)過(guò)多少次minor GC之后進(jìn)入老年代,此參數(shù)只有在Serial 串行GC時(shí)有效。
-XX:PermSize、-XX:MaxPermSize 用來(lái)控制方法區(qū)的大小,通常設(shè)置為相同的值。
1.避免新生代大小設(shè)置過(guò)小
當(dāng)新生代設(shè)置過(guò)小時(shí),會(huì)產(chǎn)生兩種比較明顯的現(xiàn)象,一是minor GC次數(shù)頻繁,二是可能導(dǎo)致 minor GC對(duì)象直接進(jìn)入老年代。當(dāng)老年代內(nèi)存不足時(shí),會(huì)觸發(fā)Full GC。
2.避免新生代設(shè)置過(guò)大
新生代設(shè)置過(guò)大,會(huì)帶來(lái)兩個(gè)問(wèn)題:一是老年大變小,可能導(dǎo)致Full ?GC頻繁執(zhí)行;二是 minor GC 執(zhí)行回收的時(shí)間大幅度增加。
3.避免Survivor區(qū)過(guò)大或過(guò)小
-XX:SurvivorRatio參數(shù)的值越大,就意味著Eden區(qū)域變大,minor GC次數(shù)會(huì)降低,但兩塊Survivor區(qū)域變小,如果超過(guò)Survivor區(qū)域內(nèi)存大小的對(duì)象在minor GC后仍沒(méi)被回收,則會(huì)直接進(jìn)入老年代,
-XX:SurvivorRatio參數(shù)值設(shè)置過(guò)小,就意味著Eden區(qū)域變小,minor GC觸發(fā)次數(shù)會(huì)增加,Survivor區(qū)域變大,意味著可以存儲(chǔ)更多在minor GC后任存活的對(duì)象,避免其進(jìn)入老年代。
4.合理設(shè)置對(duì)象在新生代存活的周期
新生代存活周期的值決定了新生代對(duì)象在經(jīng)過(guò)多少次Minor GC后進(jìn)入老年代。因此這個(gè)值要根據(jù)自己的應(yīng)用來(lái)調(diào)優(yōu),Jvm參數(shù)上這個(gè)值對(duì)應(yīng)的為-XX:MaxTenuringThreshold,默認(rèn)值為15次。
GC調(diào)優(yōu)
1.GC搭配
參見(jiàn)另一遍垃圾收集器
2.查看JVM參數(shù)
命令行工具? ?可視化工具
3.GC日志參數(shù)
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:c:\Java\gc.log
本系列:
- Java虛擬機(jī)學(xué)習(xí)(1):體系結(jié)構(gòu) 內(nèi)存模型
- Java虛擬機(jī)學(xué)習(xí)(2):垃圾收集算法
- Java虛擬機(jī)學(xué)習(xí)(3): 類加載機(jī)制
- Java虛擬機(jī)學(xué)習(xí)(4):JDK可視化監(jiān)控工具
- Java虛擬機(jī)學(xué)習(xí)(5):內(nèi)存調(diào)優(yōu)
from:?http://www.importnew.com/22240.html
總結(jié)
以上是生活随笔為你收集整理的Java虚拟机学习(5):内存调优的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java虚拟机学习(4):JDK可视化监
- 下一篇: Java虚拟机学习(6):对象访问