一宪郊、概述
image.png
- Java堆區(qū)進(jìn)一步劃分软吐,年輕代(YoungGen)和老年代(oldGen)膘盖。
- 其中年輕代又可以劃分為Eden空間鞋拟、Survivor0空間和Survivor1空間(有時(shí)也叫做from區(qū)衩椒、to區(qū))
- Survivor0和Survivor1輪番交換蚌父。無(wú)主次區(qū)分哮兰。
二、配置比例
2.1 配置新生代與老年代的比例
配置新生代與老年代在堆結(jié)構(gòu)的占比(一般不會(huì)調(diào))
- 默認(rèn)-XX:NewRatio=2苟弛,表示新生代占1喝滞,老年代占2,新生代占整個(gè)堆的1/3嗡午。
- 可以修改-XX:NewRatio=4囤躁,表示新生代占1,老年代占4荔睹,新生代占整個(gè)堆的1/5狸演。
-
當(dāng)發(fā)現(xiàn)在整個(gè)項(xiàng)目中,生命周期長(zhǎng)的對(duì)象偏多僻他,那么就可以通過(guò)調(diào)整老年代的大小宵距,來(lái)進(jìn)行調(diào)優(yōu)。
image.png
2.2 配置新生區(qū)中的伊甸園區(qū)和幸存者一二區(qū)的比例
- 在HotSpot中吨拗,Eden空間和另外兩個(gè)survivor空間缺省所占的比例是8 : 1 : 1满哪,當(dāng)然開(kāi)發(fā)人員可以通過(guò)選項(xiàng)-XX:SurvivorRatio調(diào)整這個(gè)空間比例。比如-XX:SurvivorRatio=8
- 幾乎所有的Java對(duì)象都是在Eden區(qū)被new出來(lái)的劝篷。絕大部分的Java對(duì)象的銷(xiāo)毀都在新生代進(jìn)行了(有些大的對(duì)象在Eden區(qū)無(wú)法存儲(chǔ)時(shí)候哨鸭,將直接進(jìn)入老年代)
- IBM公司的專(zhuān)門(mén)研究表明,新生代中80%的對(duì)象都是“朝生夕死”的娇妓。
- 可以使用選項(xiàng)"-Xmn"設(shè)置新生代最大內(nèi)存大小像鸡,但這個(gè)參數(shù)一般使用默認(rèn)值就可以了。
- 新生區(qū)的對(duì)象默認(rèn)生命周期超過(guò) 15 哈恰,就會(huì)去養(yǎng)老區(qū)養(yǎng)老只估。
- -XX:MaxTenuringThreshold=N
三、實(shí)操
3.1 新老比例
-Xms100m -Xmx100m -XX:+PrintGCDetails -XX:NewRatio=3
image.png
- 22528k+3072k = 25600k/25m 新生代占堆空間1/4
- Xms顯示97如上一篇文章中講到着绷,將幸存者to區(qū)拋出在外蛔钙。但是配置比例時(shí)整個(gè)堆區(qū)的大小還是要計(jì)算在內(nèi)。
3.2 伊甸園區(qū)和幸存者區(qū)比例
-Xms100m -Xmx100m -XX:+PrintGCDetails -XX:NewRatio=3 -XX:SurvivorRatio=3
image.png
- 新生代總大小20m荠医,養(yǎng)老區(qū)75組成了xms大小
- 新生代實(shí)際大小25m(20m+to區(qū)5m)
- 新生代25m與老年代75吁脱,新生代占比總空間1/4。
- 伊甸園區(qū)與幸存者一二區(qū)彬向,15m:5m:5m豫喧。3:1:1
3.2 新生代內(nèi)存大小設(shè)定
-Xms100m -Xmx100m -XX:+PrintGCDetails -XX:NewRatio=3 -XX:SurvivorRatio=3 -Xmn10m
image.png
- -XX:NewRatio=3與-Xmn10m同時(shí)設(shè)定,最終依據(jù)Xmn設(shè)定新生代大小幢泼。
- 新生區(qū)10m紧显,老年區(qū)90m。
- 新生區(qū)10m缕棵,伊甸園區(qū)和幸存者一二區(qū)還是保持3:1:1
四孵班、命令行查看各種比例
4.1 查看新生代與老年代的比例
jps
jinfo -flag NewRatios 進(jìn)程id
4.2 查看新生區(qū)中伊甸園區(qū)與幸存者區(qū)的比例
jps
jinfo -flag SurvivorRatio 進(jìn)程id