內(nèi)容摘自網(wǎng)絡(luò),僅用作個(gè)人筆記
性能定義:
- 吞吐量 - 指不考慮 GC 引起的停頓時(shí)間或內(nèi)存消耗吼和,垃圾收集器能支撐應(yīng)用達(dá)到的最高性能指標(biāo)。
- 延遲 - 其度量標(biāo)準(zhǔn)是縮短由于垃圾收集引起的停頓時(shí)間或者完全消除因垃圾收集所引起的停頓片仿,避免應(yīng)用運(yùn)行時(shí)發(fā)生抖動(dòng)纹安。
- 內(nèi)存占用 - 垃圾收集器流暢運(yùn)行所需要的內(nèi)存數(shù)量。
調(diào)優(yōu)原則
GC 優(yōu)化的兩個(gè)目標(biāo):
-
將進(jìn)入老年代的對(duì)象數(shù)量降到最低
分代GC,除了可以在 JDK7 及更高版本中使用的 G1 收集器以外厢岂,其他分代 GC 都是由 Oracle JVM 提供的光督。關(guān)于分代 GC,就是對(duì)象在 Eden 區(qū)被創(chuàng)建塔粒,隨后被轉(zhuǎn)移到 Survivor 區(qū)结借,在此之后剩余的對(duì)象會(huì)被轉(zhuǎn)入老年代。也有一些對(duì)象由于占用內(nèi)存過(guò)大卒茬,在 Eden 區(qū)被創(chuàng)建后會(huì)直接被傳入老年代船老。老年代 GC 相對(duì)來(lái)說(shuō)會(huì)比新生代 GC 更耗時(shí),因此圃酵,減少進(jìn)入老年代的對(duì)象數(shù)量可以顯著降低 Full GC 的頻率柳畔。
-
減少 Full GC 的執(zhí)行時(shí)間
Full GC 的執(zhí)行時(shí)間比 Minor GC 要長(zhǎng)很多,因此郭赐,如果在 Full GC 上花費(fèi)過(guò)多的時(shí)間(超過(guò) 1s)薪韩,將可能出現(xiàn)超時(shí)錯(cuò)誤。
① 如果通過(guò)減小老年代內(nèi)存來(lái)減少 Full GC 時(shí)間捌锭,可能會(huì)引起 OutOfMemoryError 或者導(dǎo)致 Full GC 的頻率升高俘陷。
② 另外,如果通過(guò)增加老年代內(nèi)存來(lái)降低 Full GC 的頻率观谦,F(xiàn)ull GC 的時(shí)間可能因此增加拉盾。因此,需要把老年代的大小設(shè)置成一個(gè)“合適”的值豁状。
GC 優(yōu)化需要考慮的 JVM 參數(shù)
-Xms:?jiǎn)?dòng)JVM時(shí)堆內(nèi)存的大小
-Xmx:堆內(nèi)存最大限制
-XX:NewRatio:新生代和老年代的內(nèi)存比
-XX:NewSize:新生代內(nèi)存大小
-XX:SurvivorRatio:Eden區(qū)和Survivor區(qū)的占比
設(shè)定垃圾回收器 年輕代用 -XX:+UseParNewGC 年老代用-XX:+UseConcMarkSweepGC
GC 優(yōu)化時(shí)最常用的參數(shù)是-Xms,-Xmx和-XX:NewRatio捉偏。-Xms和-Xmx參數(shù)通常是必須的,所以NewRatio的值將對(duì) GC 性能產(chǎn)生重要的影響替蔬。
設(shè)置永久代內(nèi)存大小告私,可以用-XX:PermSize和-XX:MaxPermSize參數(shù)屎暇,但是要記住承桥,只有當(dāng)出現(xiàn)OutOfMemoryError錯(cuò)誤時(shí)才需要去設(shè)置永久代內(nèi)存。