首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

运用IBM heapAnalyzer分析内存泄露的原因(转载)

2012-09-05 
使用IBM heapAnalyzer分析内存泄露的原因(转载)大家在开发J2EE应用时可能经常碰到OOM的问题。出现这种问题

使用IBM heapAnalyzer分析内存泄露的原因(转载)

大家在开发J2EE应用时可能经常碰到OOM的问题。出现这种问题的原因就是内存消耗殆尽,创建新的对象时没有可分配的内存了。为了找到真正导致OOM的原因,这里将使用IBM heapAnalyzer工具进行定位。

?

首先要知道,IBM heapAnalyzer是通过分析OOM后的Java heap dump文件的,通过对dump文件的分析找到内存可能泄露的点。了解这个之后,我们首先需要生成dump文件,这里我可以编写一个小程序,如:

public class Test {
?/**
? * @param args
? */
?public static void main(String[] args) {
? List<String> list = new ArrayList<String>();
? //10M的PermSize在integer范围内足够产生OOM了
? int i = 0;
? while (true) {
?? list.add(new String("test"));? }
?}

}


运行该程序时设置JVM的堆内存的极限值为10M(-Xmx10m),并加上-XX:+HeapDumpOnOutOfMemoryError,此参数是帮助生成dump文件,程序启动后直到抛出OOM异常。异常抛出后,在程序的classpath下会生成以一个以.hprof结尾的文件,如:java_pid4504.hprof,这就是我们需要的dump文件。

热点排行