性能测试总结之内存泄露和内存溢出(共5篇).docx 立即下载
2025-08-27
约3.3万字
约51页
0
38KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

性能测试总结之内存泄露和内存溢出(共5篇).docx

性能测试总结之内存泄露和内存溢出(共5篇).docx

预览

免费试读已结束,剩余 46 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

性能测试总结之内存泄露和内存溢出(共5篇)

第一篇:性能测试总结之内存泄露和内存溢出性能测试总结之内存泄露和内存溢出2009-12-10作者:yunshuai来源:TaobaoQATeam刚刚做完了一个项目的性能测试,“有幸”也遇到了内存泄露的案例,所以在此和大家分享一下。主要从以下几部分来说明,关于内存和内存泄露、溢出的概念,区分内存泄露和内存溢出;内存的区域划分,了解GC回收机制;重点关注如何去监控内存问题;此外分析出问题还要如何解决内存问题。下面就开始本篇的内容:第一部分概念众所周知,java中的内存java虚拟机自己去管理的,他不想C++需要自己去释放。笼统地去讲,java的内存分配分为两个部分,一个是数据堆,一个是序在运行的时候一般分配数据堆,把局部的临时的变量都放进去,生命周期和进程有关系。但是如果程序员声明了static的变量,就直接在栈中运行的,进了,不一定会销毁static变量。另外为了保证java内存不会溢出,java中有垃圾回收机制。System.gc()即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言求jvm有gc,也没有规定gc如何工作。垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。而其中,内存溢出就是你要求分配的java虚拟机内存超出了系统能给你的,系统不能满足需求,于是产生溢出。内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问,该块已分配出存也无法再使用,随着服务器内存的不断消耗,而无法使用的内存越来越多,系统也不能再次将它分配给需要的程序,产生泄露。一直下去,程序也逐渐使用,就会溢出。第二部分原理JAVA垃圾回收及对内存区划分在Java虚拟机规范中,提及了如下几种类型的内存空间:◇栈内存(Stack):每个线程私有的。◇堆内存(Heap):所有线程公用的。◇方法区(MethodArea):有点像以前常说的“进程代码段”,这里面存放了每个加载类的反射信息、类函数的代码、编译时常量等信息。◇原生方法栈(NativeMethodStack):主要用于JNI中的原生代码,平时很少涉及。而Java的使用的是堆内存,java堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的象,“垃圾回收”也是主要是和堆内存(Heap)有关。垃圾回收的概念就是JAVA虚拟机(JVM)回收那些不再被引用的对象内存的过程。一般我们认为正在被引用的对象状态为“alive”,而没有被应用或者取用属性的对象状态为“dead”。垃圾回收是一个释放处于”dead”状态的对象的内存的过程。而垃圾回收的规则和算法被动态的作用于应用运行当中,自动回JVM的垃圾回收器采用的是一种分代(generational)回收策略,用较高的频率对年轻的对象(younggeneration)进行扫描和回收,这种叫做minorcollec对老对象(oldgeneration)的检查回收频率要低很多,称为majorcollection。这样就不需要每次GC都将内存中所有对象都检查一遍,这种策略有利于实时观收。(SunJVM1.3有两种最基本的内存收集方式:一种称为copying或scavenge,将所有仍然生存的对象搬到另外一块内存后,整块内存就可回收。这种效率,但需要有一定的空闲内存,拷贝也有开销。这种方法用于minorcollection。另外一种称为mark-compact,将活着的对象标记出来,然后搬迁到一起块的内存,其他内存就可以回收了。这种方法不需要占用额外的空间,但速度相对慢一些。这种方法用于majorcollection.)一些对象被创建出来只是拥有短暂的生命周期,比如iterators和本地变量。另外一些对象被创建是拥有很长的生命周期,比如高持久化对象等。垃圾回收器的分代策略是把内存区划分为几个代,然后为每个代分配一到多个内存区块。当其中一个代用完了分配给他的内存后,JVM会在分配的内存行一个局部的GC(也可以叫minorcollection)操作,为了回收处于“dead”状态的对象所占用的内存。局部GC通常要不FullGC要快很多。JVM定义了两个代,年轻代(yonggeneration)(有时称为“nursery”托儿所)和老年代(oldgeneration)。年轻代包括“Edenspace(伊甸园)”和两个“survivor虚拟内存初始化的时候会把所有对象都分配到Edenspace,并且大部分对象也会在该区域被释放。当进行minorGC的时候,VM会把剩下的没有释放的Edenspace移动到其中一个survivors
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

性能测试总结之内存泄露和内存溢出(共5篇)

文档大小:38KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用