JVM調(diào)優(yōu)
JVM調(diào)優(yōu)藤滥,本質(zhì)上是:對象不合理創(chuàng)建梗搅,堆內(nèi)存不合理利用的一個候補(bǔ)解決方案。對象不合理創(chuàng)建和堆內(nèi)存不合理利用會導(dǎo)致堆內(nèi)存溢出衰猛,導(dǎo)致GC迟蜜。
lGC會導(dǎo)致Stop-The-World(STW)現(xiàn)象,破壞系統(tǒng)穩(wěn)定運(yùn)行,給用戶系統(tǒng)卡頓體驗啡省。從JVM調(diào)優(yōu)的角度來看娜睛,我們應(yīng)該盡量避免發(fā)生YGC或FullGC髓霞,或者使得YGC和FullGC的時間足夠的短。
調(diào)優(yōu)策略
1畦戒、考慮JVM需要的總內(nèi)存大小
2方库、年輕代和老年代內(nèi)存的分配,年輕代又分為Eden,s0,s1
3障斋、選擇合適的垃圾回收算法纵潦,控制 GC 停頓次數(shù)和時間。默認(rèn)情況下是 G1垃环,但是也不一定是最優(yōu)的邀层,也可以考慮其他的收集器。主要的目的就是控制一下 Gc 的次數(shù)以及停頓的時間遂庄。
4寥院、解決內(nèi)存泄露的問題。根據(jù)日志來分析虛擬機(jī)的一些信息(內(nèi)存大小涛目,對象的統(tǒng)計秸谢,以及相應(yīng)的線程等等),這里不是說通過虛擬機(jī)優(yōu)化來解決問題泌绣,可能最后要去修改代碼
5钮追、檢查哪些對象在系統(tǒng)中數(shù)量最大,比如一個對象實(shí)例在虛擬機(jī)中比較多阿迈,為什么會這么多元媚,分析一下是否需要這么多的對象實(shí)例,是否可以通過復(fù)用苗沧,來減少對這個需要
6刊棕、將轉(zhuǎn)到老年代的對象數(shù)量降到最小。老年代的對象存活時間一般都很長待逞,會占用大量的內(nèi)存資源甥角,不是十分有必要的話就別讓這些進(jìn)去到老年代了。相對比較理想的就在新生代給消滅了识樱。
7嗤无、將轉(zhuǎn)到老年代的對象數(shù)量降到最小。老年代的對象存活時間一般都很長怜庸,會占用大量的內(nèi)存資源当犯,不是十分有必要的話就別讓這些進(jìn)去到老年代了。相對比較理想的就在新生代給消滅了割疾。
擴(kuò)展:JVM的2種GC
垃圾回收GC,分為2種嚎卫,一種是Minor GC,也可以成為YGC,即年輕代GC宏榕,在Eden園區(qū)發(fā)生拓诸;還有一種稱為Major GC侵佃,又稱為FullGC,發(fā)生在老年區(qū)。