旧袜子

一看书瞌睡就来了

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  5 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

         关于java se的垃圾回收器以前一只都没怎么了解,今天一次偶然的机会.我知道了命令行的java 还有个参数 -verbose:gc 可以即时的刷新java程序的内存使用情况.用来测试的程序就是在不断的相加两个很大的字符串对象.以下就是程序执行时的输出信息.

[GC 409K->233K(1984K), 0.0058250 secs]   //从这到第六行中间的圆括号里都是1984k.我猜这应该是堆的大小吧.
[GC 718K->510K(1984K), 0.0025204 secs]
[GC 774K->771K(1984K), 0.0014421 secs]
[GC 1201K->939K(1984K), 0.0013013 secs]
[GC 1444K->1274K(1984K), 0.0013242 secs]
[GC 1687K->1685K(2400K), 0.0017393 secs]   //堆大小变为2400k,将会执行垃圾回收器
[Full GC 1685K->532K(2400K), 0.0315082 secs]   
//这里开始启动垃圾回收器,注意后面的时间,基本上是上面的30倍.可见垃圾回收器是多么的占资源.
[GC 943K->943K(1984K), 0.0019234 secs]   //执行gc后堆大小变为1984k
[GC 1431K->1429K(2228K), 0.0078479 secs]   //堆大小变为2400k,将会执行垃圾回收器
[Full GC 1429K->607K(2228K), 0.0260561 secs]   //gc()
[GC 1093K->1093K(1984K), 0.0017910 secs]   
[GC 1376K->1374K(1984K), 0.0009124 secs]
[GC 1654K->1654K(2268K), 0.0015390 secs]
[Full GC 1654K->682K(2268K), 0.0264760 secs]
[GC 1563K->1561K(2304K), 0.0019106 secs]   
[Full GC 1561K->439K(2304K), 0.0331671 secs]
[GC 757K->757K(1984K), 0.0013675 secs]
[Full GC 757K->757K(1984K), 0.0263450 secs]
[GC 1751K->1749K(2340K), 0.0020385 secs]
[Full GC 1749K->477K(2340K), 0.0268218 secs]
[GC 833K->833K(1984K), 0.0015278 secs]
[Full GC 833K->833K(1984K), 0.0245162 secs]
[GC 1939K->1937K(2696K), 0.0014709 secs]   //(注意红色)所相加的两个字符串已经越来越大,以至频繁的启动gc,于是扩大的堆容量
[GC 2331K->2331K(3092K), 0.0040047 secs]
[Full GC 2331K->908K(3092K), 0.0268548 secs]
...........


结论:java se的垃圾回收器一般是在堆容量超出预分配时才会启动,执行完毕后,再把堆变成以前的大小.但是如果频繁的启动gc,VM则会扩大堆容量.如上面的2696k.

以上都是我根据打印出的信息所做出的推测,不知道对不对.欢迎批评.

[GC 409K->233K(1984K), 0.0058250 secs]  还有右边蓝色的部分我不知道是什么意思,希望知道的达人告诉下.

posted on 2006-05-16 21:50 旧袜子 阅读(557) 评论(2)  编辑  收藏

Feedback

# re: 关于Java SE垃圾回收器的执行周期猜想 2006-05-25 19:54 pc
http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=200648231527
Java数据报之失序和丢包

http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=200647215416
Java新手学习:IIS6和Tomcat5的整合

http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=200647172615
Jakarta-Tomcat 简明中文版用户指南  回复  更多评论
  

# re: 关于Java SE垃圾回收器的执行周期猜想 2006-05-26 16:58 y
[GC 325407K->83000K(776768K), 0.2300771 secs]
[GC 325816K->83372K(776768K), 0.2454258 secs]
[Full GC 267628K->83769K(776768K), 1.8479984 secs]
上面的三行是 GC 的详细输出,两次小收集和一次大收集。箭头前后的两个数字代表 GC 后活的对象的组合长度。括号内的数字代表合计的空间,等于堆大小减去一片生存空间。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: