JVM堆內存瞭解

1、JVM堆內存包括:年輕代、年老代。

2、持久代。

3、GC時,年輕代、年老代進行垃圾回收。FULL GC時,年輕代、年老代、持久內存都進行垃圾回收。

4、FULL GC時,年輕代、年老代、持久內存都進行垃圾回收。

5、GC日誌示例:

[GC [PSYoungGen: 68350K->11753K(326528K)] 601880K->545283K(1025600K), 0.0136065 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

(1)PSYoungGen: 68350K->11753K(326528K)解釋如下:

年輕代 GC前已使用68350K,GC後已使用11753K,年輕代內存共326528K

           本次GC了: 68350K - 11753K = 56597K

(2)601880K->545283K(1025600K)解釋如下:

堆內存 GC前已使用601880K,GC後已使用545283K,堆內存共1025600K

           本次GC了:601880K - 545283K = 56597K

注意:堆內存、年輕代本次GC都是56597K,那麼說明年老代沒有GC或者就是小概率事件發生了。

(3)GC持續時間 0.0136065 secs【秒】

 

6、FULL GC日誌示例:

[Full GC (System) [PSYoungGen: 11753K->0K(326528K)] [ParOldGen: 533530K->532770K(699072K)] 545283K->532770K(1025600K) [PSPermGen: 182264K->182264K(262400K)], 0.4178577 secs] [Times: user=5.41 sys=0.00, real=0.42 secs]

(1)PSYoungGen: 11753K->0K(326528K)解釋如下:

年輕代  FULL GC前已使用11753K,FULL GC後已使用0K,年輕代內存共326528K

             本次FULL GC了: 11753K - 0K = 11753K

(2)ParOldGen: 533530K->532770K(699072K)解釋如下:

年老代 FULL GC前已使用533530K,FULL GC後已使用532770K,年老代內存共699072K

             本次FULL GC了: 533530K - 532770K = 760K-----》是否年老代設置小了?導致FULL GC了也沒回收多少內存。

(3)545283K->532770K(1025600K) 解釋如下:

堆內存 FULL GC前已使用545283K,FULL GC後已使用532770K,堆內存共1025600K

            本次FULL GC了: 545283K - 532770K = 12513K

            本次堆內存FULL GC = 年輕代本次FULL GC + 年老代本次FULL GC = 11753K + 760K = 12513K

(4)PSPermGen: 182264K->182264K(262400K)解釋如下:

持久代 FULL GC前已使用182264K,FULL GC後已使用182264K,持久代內存共262400K。

           本次FULL GC了: 182264K - 182264K = 0K---》是否意味持久代沒啥可回收的?,可以將持久代內存設置爲200M

(5)FULL GC持續時間 0.4178577 secs

(6)Full GC (System) 這裏System表示代碼中有System.gc()調用。

(7)從FULL GC日誌可以看出:

年老代 = 堆內存 - 年輕代  即 1025600K - 326528K = 699072K

年輕代 = Eden + survivor + survivor,其中一個survivor用來臨時存儲(採用複製算法時)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章