Variant数组这样用会不会有内存泄漏和内存溢出

内存是在性能测试国策还能中最受关注的资源之一有内存引起的问题可以大体分为两类:内存泄露和内存溢出。因此乍看之下很容易混淆二者,下面就具体来分析这兩者

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

  2. 内存泄露的原因大体可以归为5个。分别是:

    A.代码编写的时候因為对方法和类应用设计的不合理,没有预估到临时对象会占用大量内存

    B.把过多的数据放入到java缓存

    C.性能压力大导致消息堆积占用内存,以臸于在性能测试时生成庞大数量的临时变量

    D.GC没有做出有效回收

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

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

  5. 以发生的方式来分类内存泄露可以分为四类:

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

  7. 发生内存泄露的代码只有在某些特定环境或操作过程下才会发生

    常发性和偶发性是相对的,对于特定的环境偶发性的也许就变成了常发性的。所以测试环境和测试方法对监测内存泄露至关重要

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

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

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

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

  12. 那么在测试的过程中,我们应该如何判断是否发生了内存泄露

    内存泄露的迹象:老年代每次垃圾回收的时候,总是不能全部回收一次比一次占用的内存多。

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

  14. 那么内存溢出和内存泄露的不同点有在何处呢,二者的不同点主要有3处。

    A.内存泄露是导致内存溢出的原因之一有一定的因果关系

    B.内存泄露可以通过完善代码来避免

    C.内存溢出可以通过调整配置或者硬件来减少发生频率

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域)建议您详细咨询相关领域专业人士。

我要回帖

更多关于 在什么情况下使用数组 的文章

 

随机推荐