性能测试总结之内存泄露和内存溢出

发表于:2009-12-02 15:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:yunshuai    来源:Taobao QA Team

分享:

  JVM定义了两个代,年轻代(yong generation)(有时称为“nursery”托儿所)和老年代(old generation)。年轻代包括 “Eden space(伊甸园)”和两个“survivor spaces”。虚拟内存初始化的时候会把所有对象都分配到 Eden space,并且大部分对象也会在该区域被释放。 当进行  minor GC的时候,VM会把剩下的没有释放的对象从Eden space移动到其中一个survivor spaces当中。此外,VM也会把那些长期存活在survivor spaces 里的对象移动到 老生代的“tenured” space中。当 tenured generation 被填满后,就会产生Full GC,Full GC会相对比较慢因为回收的内容包括了所有的 live状态的对象。pemanet generation这个代包括了所有java虚拟机自身使用的相对比较稳定的数据对象,比如类和对象方法等。

  关于代的划分,可以从下图中获得一个概况:

JVM

  如果垃圾回收器影响了系统的性能,或者成为系统的瓶颈,你可以通过自定义各个代的大小来优化它的性能。使用JConsole,可以方便的查看到当前应用所配置的垃圾回收器的各个参数。想要获得更详细的参数,可以参考以下调优介绍:

  Tuning Garbage collection with the 5.0 HotSpot VM

  http://java.sun.com/docs/hotspot/gc/index.html

  最后,总结一下各区内存:

  Eden Space (heap): 内存最初从这个线程池分配给大部分对象。

  Survivor Space (heap):用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。

  Tenured Generation (heap):用于保持已经在 survivor space内存池中存在了一段时间的对象。

  Permanent Generation (non-heap): 保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的,

  Code Cache (non-heap):HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)

  第三部分 监控(工具发现问题)

  谈到内存监控工具,JConsole是必须要介绍的,它是一个用JAVA写的GUI程序,用来监控VM,并可监控远程的VM,易用且功能强大。具体可监控JAVA内存、JAVA CPU使用率、线程执行情况、加载类概况等,Jconsole需要在JVM参数中配置端口才能使用。

  由于是GUI程序,界面可视化,这里就不做详细介绍,

  具体帮助支持文档请参阅性能测试JConsole使用方法总结:

  http://www.taobao.ali.com/chanpin/km/test/DocLib/性能测试辅助工具-JConsole的使用方法.aspx

  或者参考SUN官网的技术文档:

  http://Java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html

  http://Java.sun.com/javase/6/docs/technotes/tools/share/jconsole.html

32/3<123>
重磅发布,2022软件测试行业现状调查报告~

精彩评论

  • pkqsunrain
    2010-7-08 17:39:30

    《性能测试调优宝典》是什么,
    如果不是机密,发一份出来吧

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号