在上文的jvisualvm只能体现出内存溢出,那么怎么能分析出哪里出问题了呢。
1.举个栗子
首先我们使用这段代码使内存溢出。
2.dump堆日志
在发生内存溢出时(如果发生gc了 那么将得不到溢出时的日志 ),点击堆 dump,会生成.hprof文件,查看.hprof文件就可以分析出内存溢出情况。(在dump时 应用会暂停)
3.安装MAT
我们需要一个软件查看.hprof文件
解压后,双击可以打开。
4.查看.hprof文件
打开上文的.hprof文件。
会发现这里有一个program。
点击 See stacktrace ,会发现报错日志,发现已经分析出有问题的地方了。