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用来临时存储(采用复制算法时)。

发布了98 篇原创文章 · 获赞 39 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/XiaoXiao_RenHe/article/details/90676000