使用jconsole监控JVM内存
首先聲明:此篇博文分析的是JDK1.8。
JVM內(nèi)存區(qū)域總體分兩類:heap區(qū)和非heap區(qū)。Jconsole中對內(nèi)存劃分為同樣的結(jié)構(gòu),如下:
??
heap區(qū)又分為:?
- Eden Space(伊甸園)
- Survivor Space(幸存者區(qū)) ,Survivor Space分為兩個空間大小一樣的區(qū)域,分別是To Survivor和From Survivor,并且始終保持一個Survivor是空的
- Old Gen(老年代)
Eden Space:字面意思是伊甸園,對象被創(chuàng)建的時候首先放到Eden Space,進(jìn)行垃圾回收后,不能被回收的對象被放入到空的Survivor區(qū)域。
Survivor Space:幸存者區(qū),用于保存在eden space內(nèi)存區(qū)域中經(jīng)過垃圾回收后沒有被回收的對象。Survivor有兩個,分別為To Survivor、 From Survivor,這個兩個區(qū)域的空間大小是一樣的。執(zhí)行垃圾回收的時候Eden區(qū)域不能被回收的對象被放入到空的survivor(也就是To Survivor,同時Eden區(qū)域的內(nèi)存會在垃圾回收的過程中全部釋放),另一個survivor(即From Survivor)里不能被回收的對象也會被放入這個survivor(即To Survivor),然后To Survivor 和 From Survivor的標(biāo)記會互換,始終保證一個survivor是空的。
Eden Space和Survivor Space都屬于新生代,新生代中執(zhí)行的垃圾回收被稱之為Minor GC(因?yàn)槭菍π律M(jìn)行垃圾回收,所以又被稱為Young GC),每一次Young GC后留下來的對象age(年齡)加1,這個age就是用來判斷對象是否進(jìn)入老年的標(biāo)志。
Old Gen:老年代,用于存放新生代中經(jīng)過多次垃圾回收仍然存活的對象,也有可能是新生代分配不了內(nèi)存的大對象會直接進(jìn)入老年代。經(jīng)過多次垃圾回收都沒有被回收的對象,這些對象的age已經(jīng)足夠old了,就會放入到老年代。
當(dāng)老年代被放滿之后,虛擬機(jī)會進(jìn)行垃圾回收,稱之為Major GC。由于Major GC除并發(fā)GC外均需對整個堆進(jìn)行掃描和回收,因此又稱為Full GC。
heap區(qū)即堆內(nèi)存,整個堆大小=年輕代大小 + 老年代大小。堆內(nèi)存默認(rèn)為物理內(nèi)存的1/64(<1GB);默認(rèn)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制,可以通過MinHeapFreeRatio參數(shù)進(jìn)行調(diào)整;默認(rèn)空余堆內(nèi)存大于70%時,JVM會減少堆直到-Xms的最小限制,可以通過MaxHeapFreeRatio參數(shù)進(jìn)行調(diào)整。
?
下面我們來認(rèn)識下非堆內(nèi)存(非heap區(qū))?
Code Cache:代碼緩存區(qū),它主要用于存放JIT所編譯的代碼。CodeCache代碼緩沖區(qū)的大小在client模式下默認(rèn)最大是32m,在server模式下默認(rèn)是48m,這個值也是可以設(shè)置的,它所對應(yīng)的JVM參數(shù)為ReservedCodeCacheSize 和 InitialCodeCacheSize,可以通過如下的方式來為Java程序設(shè)置。
CodeCache緩存區(qū)是可能被充滿的,當(dāng)CodeCache滿時,后臺會收到CodeCache is full的警告信息,如下所示:?
“CompilerThread0” java.lang.OutOfMemoryError: requested 2854248 bytes for Chunk::new. Out of swap space?
注:JIT編譯器是在程序運(yùn)行期間,將Java字節(jié)碼編譯成平臺相關(guān)的二進(jìn)制代碼。正因?yàn)榇司幾g行為發(fā)生在程序運(yùn)行期間,所以該編譯器被稱為Just-In-Time編譯器。
轉(zhuǎn)載于:https://www.cnblogs.com/jiangwangxiang/p/9096074.html
總結(jié)
以上是生活随笔為你收集整理的使用jconsole监控JVM内存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rancher2.0中邮件通知的设置
- 下一篇: Unix时间戳计算