如何检测java程序内存泄漏
内存泄漏常常发生在产品上线运行时,常常会随着时间的不断累积对象得不到释放而不断地增加内存,最后导致内存溢出
-
1.打开/tomcat_home/bin/catalina.bat文件
2.加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump,这样当内存溢出是就会在对应路径下生成dump文件
-
运行程序打开jdk bin 文件夹下再带的 jvisualvm.exe
-
选择tomcat线程,打开实时监控页面可以看到对应的堆栈线程和装在类,内存的实时情况
-
运行程序打开jdk bin 文件夹下再带的 jconsole.exe,可以概览堆栈线程和装在类,内存的全部运行时间情况
-
下载安装mat,dump分析软件,安装后,点击file open 导入dump文件
-
打开后,灰色区域为可能发生内存溢出的区域,下带问题描述
-
选择Histogram,点击shallow列进行排序,找出实例最多的
-
右键实例最的选择list objects-with incoming references,可在根据正则表达式输入自己想查的类,搜索,后右键打开 path to gc root-exclude phantom/weak/soft etc. references 就可以查出 调用为回收的相关信息。
通过Eclipse市场安装 方法/步骤
一.安装
首先,你得有一个Eclipse(因为MAT是Eclipse的插件)然后,你要在Eclipse上安装MAT,步骤如下:1.点击Help,Install New Soft,就出现了以下Install界面:然后我们点击ADD,在弹出的框中填上Mat插件的地址:http://download.eclipse.org/mat/1.6/update-site/,确定后,点击Select All,点击Next,之后就一直确定,就能安装了。安装之后需要重启Eclipse.二.MAT导入文件
1.打开DDMS2.选中要分析的应用3.点击Update Head按钮和Dump HPROF file
按钮(这里要等一会儿)
4.选择你要存储的位置,存储hprof文件5.将.hprof文件进行转换,转换的方法:将.hprof文件拷贝到PC上的/ANDROID_SDK/tools目录下,并输入命令hprof-conv xxx.hprof yyy.hprof,其中xxx.hprof为原始文件,yyy.hprof为转换过后的文件。转换过后的文件自动放在/ANDROID_SDK/tools目录下。6.将转换后的文件拖入Eclipse中7.可以看到以下界面。三.MAT分析文件
1.Histogram操作:列出每个类实例的数量点击Action下的Histogram,得到以下结果我们可以在第一行输入进行正则匹配:可以选中某一条点击右键进行更多的操作比较重要的一点,右键出来选中List Objects,得到的结果再右键选中"Paths to GC Roots",我们可以通过它快速找到GC ROOT.如果存在GC ROOT,它就不会被回收。感谢:http://blog.csdn.net/caiwenfeng_for_23/article/details/23210103http://www.cnblogs.com/0616--ataozhijia/p/3954423.html注意事项
-
内存泄漏检测一定要注意代码的的规范性,减少冗余代码
-












浙公网安备 33010602011771号