答:简单的说就是申请一块内存空间,使用完毕后没有释放掉,它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽
全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄漏了。
泄漏分类:
1.常发性内存泄漏:发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的
也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3.发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构
造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
4.隐式内存泄漏:程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄
漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存
也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。
内存泄漏的表现:
1. CPU资源耗尽 2.进程ID耗尽 3.硬盘耗尽.
定位JAVA类的应用的内存泄漏
http://twb.iteye.com/blog/182084
4. 如果用纯JAVA的应用调用J2EE应用服务器的容器资源会出现什么结果?需要如何维护容器资源?(说明原理即可)
5. 如何定位JAVA的方法调用消耗的时间?(不通过在源代码中加时间戳的方式)?
答:使用性能分析工具VPA ,CallTreeAnalyzer可以帮助用户找到耗时最长的方法以及该方法的所有调用的堆栈,对所有与速度相关的
性能问题都使用。
6. 如何定位C语言中的函数调用消耗的时间?
#include
#include
void main()
{
clock_t Pstart,Pend;
Pstart=clock();
//程序执行部分!
Pend=clock();
printf( “%f “,(Pend – Pstart)/CLK_TCK);
}