性能测试中与内存溢出与内存泄露

时间:2024-10-14 14:32:19

1、内存泄露的概念:内存泄露是指程序在申请内存时,没有足够的内存空间供其使用。

性能测试中与内存溢出与内存泄露

2、内存泄露的原因:内存泄露的原因大体可以归为5个。分别是:A.代码编写的时候,因为对方法和类应用设计的不合理,没有预估到临时对象会占用大量内存。B.把过多的数据放入到java缓存C.性能压力大导致消息堆积占用内存,以至于在性能测试时生成庞大数量的临时变量D.GC没有做出有效回收E.内存泄露

性能测试中与内存溢出与内存泄露

3、内存泄露的概念内存泄露是指程序在运行过程中动态申请的内存空间不再使用后没有及时释放,从而很可能导致应用程序内存无限增长。

性能测试中与内存溢出与内存泄露

4、内存泄露是指你向系统申请分配内存进行使用(new),可是使用完了之后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将他分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果调到地上不能吃了。这就是溢出!比方说栈,栈空时再做退栈也产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项数列,称为内存溢出。

性能测试中与内存溢出与内存泄露

5、内存泄露的分类:以发生的方式来分类,内存泄露可以分为四类:① 常发性内存泄露。② 偶发性内存泄露。③ 一次性内存泄露。④ 隐式内存泄露。

性能测试中与内存溢出与内存泄露

6、常发性内存泄露:发生内存泄露的代码会被多次执行到,每次被执行的时候,都会导致一块内存泄露。

性能测试中与内存溢出与内存泄露

7、偶发性内存泄露:发生内存泄露的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的,对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对监测内存泄露至关重要。

8、一次性内存泄露:发生内存泄露的代码只被执行一次,或者由于算法上的缺陷,导致总会有一块仅且只有一块内存发生泄露。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存。所以,内存泄露只会发生一次。

性能测试中与内存溢出与内存泄露

9、隐式内存泄露:程序在运行过程中不断的分配内存,但是知道结束的时候才释放内存。严格的说这里并没有发生内存泄露,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时解释内存也可能导致最终耗尽系统所有的内存。所以,我们称这类内存泄露为隐式内存泄露。

10、程序在运行过程中不断的分配内存,但是知道结束的时候才释放内存。严格的说这里并没有发生内存泄露,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时解释内存也可能导致最终耗尽系统所有的内存。所以,我们称这类内存泄露为隐式内存泄露。

11、程序在运行过程中不断的分配内存,但是知道结束的时候才释放内存。严格的说这里并没有发生内存泄露,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时解释内存也可能导致最终耗尽系统所有的内存。所以,我们称这类内存泄露为隐式内存泄露。

性能测试中与内存溢出与内存泄露

12、那么在测试的过程中,我们应该如何判断是否发生了内存泄露。内存泄露的迹象:老年代每次垃圾回收的时候,总是不能全部回收,一次比一次占用的内存多。

13、说了这么多,那么内存溢出和内存泄露是否有相同的地方呢,答案自然是肯定的,那么相同相同之处就是:两者都会导致应用程序出现问题,引起程序性能下降或服务挂起。

性能测试中与内存溢出与内存泄露

14、那么内存溢出和内存泄露的不同点有在何处呢,二者的不同点,主要有3处。A.内存泄露是导致内存溢出的原因之一,有一定的因果关系B.内存泄露可以通过完善代码来避免C.内存溢出可以通过调整配置或者硬件来减少发生频率

性能测试中与内存溢出与内存泄露
© 手抄报圈