jvm堆的内存分配

jvm 参数如下
-Xms400m
-Xmn300m
-Xmx400m
-XX:PermSize=140M 
-XX:MaxPermSize=140M
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-verbose:gc
-Xloggc:gc.log
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.port=9880
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

启动myeclipse6.5,查看gc.log,只有一条gc信息:
2.253: [GC 2.253: [DefNew: 245760K->24701K(276480K), 0.0625636 secs] 245760K->24701K(378880K), 0.0626390 secs]

年轻代中内存区域分为Eden,Survivor1,Survivor2这三块,内存占用比例默认为8:1:1,由于新生代分配300m,所以Eden应该分配240M(245760K),Survivor1,Survivor2各为30M,通过jconsole查看各个区域所占内存与这此也相符
jvm堆的内存分配

jvm堆的内存分配
现再来分析gc原因,当DefNew(即为eden区,不知道为啥打印的日志名和jconsole上显示的名字不一样)内存达到245760K,正好为分配的240m,eden区内存已满开始回收,245760K->24701K,回收了245760K-24701K=215M,回收率还不错,还有25m左右没有回收。其中276480K经计算发现是eden+一个Survivor所占用内存,不知道何意?
245760K->24701K(378880K), 整个堆空间也就eden这一区进行了回收。

你可能感兴趣的:(内存分配)