序言
显存泄露(MemoryLeak)是指程序中已动态分配的堆显存因为某种诱因程序未释放或未能释放,导致系统显存的浪费,造成程序运行速率减缓甚至系统崩溃等严重后果
显存泄露缺陷具有隐蔽性、积累性的特点,比其他显存非法访问错误更难测量;由于显存泄露的形成缘由是显存块未被释放,属于遗漏型缺陷而不是过失型缺陷;据悉,显存泄露一般不会直接形成可观察的错误病症,而是逐步积累,增加系统整体性能,极端的情况下可能使系统崩溃
随着计算机应用需求的日渐降低,应用程序的设计与开发也相应的日趋复杂,开发人员在程序实现的过程中处理的变量也大量降低,怎样有效进行显存分配和释放,避免显存泄露的问题显得越来越突出
比如:服务器应用软件,须要长时间的运行,不断的处理由顾客端发来的恳求,假如没有有效的显存管理,每处理一次恳求信息就有一定的显存泄露;这样除了影响到服务器的性能,还可能导致整个系统的崩溃。为此,显存管理成为软件设计开发人员在设计高考虑的主要方面
显存泄露的诱因
开发人员进行程序开发的过程使用动态储存变量时,不可防止地面对显存管理的问题。程序中动态分配的储存空间,在程序执行完毕后须要进行释放。没有释放动态分配的储存空间而导致显存泄露,是使用动态储存变量的主要问题。通常情况下,开发人员使用系统提供的显存管理基本函数,如malloc、recalloc、calloc、free等,完成动态储存变量储存空间的分配和释放
然而,当开发程序中使用动态储存变量较多和频繁使用函数调用时,都会常常发生显存管理错误
比如:
显存泄露一般分为一下四类
1)常发性显存泄露
发生显存泄露的代码会被多次执行,每行一次执行就会造成一块显存泄露
2)偶发性显存泄露
发生显存泄露的代码只在个别特定的环境或操作中才能发生,常发性和偶发性是相对的,在特定的环境下,偶发性显存泄露其实就弄成了常发性
3)一次性显存泄露
发生显存泄露的代码只被执行一次
4)隐式显存泄露
程序在运行过程中不停的分配显存,但直至结束时才释放显存,严格的说,并没有发生显存泄露,由于程序最终释放了显存,并且在服务器上一个程序,一般运行时间长,不及时释放显存也可能造成显存用尽;这类被称为隐式显存泄露
显存分配策略
程序运行时的显存分配策略有三种,分别是静态分配,栈式分配,和堆式分配,对应的,三种储存策略使用的显存空间主要分别是静态储存区(俗称方式区)、栈区和堆区
静态储存区(方式区)
主要储存静态数据、全局static数据和常量;这块显存在程序编译时就早已分配好,但是在程序整个运行期间都存在
栈区
当方式被执行时,技巧体内的局部变量(其中包括基础数据类型、对象的引用)都在栈上创建,并在方式执行结束时这种局部变量所持有的显存将会手动被释放;由于栈显存分配运算外置于处理器的指令集中,效率很高,并且分配的显存容量有限
堆区
又称动态显存分配,一般就是指在程序运行时直接new下来的显存,也就是对象的实例;这部份显存在不使用时将会由垃圾回收器来负责回收
栈与堆的区别
在方式体内定义的(局部变量)一些基本类型的变量和对象的引用变量都是在技巧的栈显存中分配的
当在一段方式块中定义一个变量时,Java都会在栈中为该变量分配显存空间,当超过该变量的作用域后,该变量也就无效了,分配给它的显存空间也将被释放掉,该显存空间可以被重新使用
堆显存拿来储存所有由new创建的对象(包括该对象其中的所有成员变量)和字段
在堆中分配的显存,将由垃圾回收器来手动管理;在堆中形成了一个链表或则对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于字段或则对象在堆显存中的首地址,这个特殊的变量就是我们前面说的引用变量;我们可以通过这个引用变量来访问堆中的对象或则字段
举个事例
publicclassSample{ ints1 = 0;
Sample mSample1 = newSample();
publicvoidmethod(){ ints2 = 1; Sample mSample2 = newSample();
Sample mSample3 = newSample();
}
Sample类的局部变量s2和引用变量mSample2都是存在于栈中,但mSample2指向的对象是存在于堆上的;mSample3指向的对象实体储存在堆上,包括这个对象的所有成员变量s1和mSample1,而它自己存在于栈中
推论
讲到这儿你就不难看出现在作为一名程序员,这么就免不了要和Linux形成一定的联系,为此我也建议你们要学习一下Linux
学Linux最好地方法,就是直接去用!直接将自己的开发环境都改成linux,一开始很生硬,很不适应,这很正常。假如你仍然倍感很舒服,只能说明你始终没有进步。想想我们学了这么多年日语,绝大多数人还是未能把握英文,见到英文文档就直接手动屏蔽。其缘由都是:仍然在学,但从来没在用;只学而不用,没有半点用
在这儿提供一份Linux全套学习指南:可以私信发送“学习”即可免费获取