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