首页 > 其他 > 详细

内存溢出问题分析与解决

时间:2019-09-18 22:47:08      阅读:100      评论:0      收藏:0      [点我收藏+]

大型项目中会遇到内存溢出的问题,而项目中的代码数量往往是十万百万行,因此很难定位该类问题;这里我们需要借助内存分析工具---JProfiler。

该工具使用时需要激活码,激活码这里就不提供了,度娘搜索一大堆。。。

官网下载地址为 https://www.ej-technologies.com/download/jprofiler/files

技术分享图片

 

 

工具安装好了之后,编写一段代码模拟内存溢出:

创建一个空类Test

public class Test {
}  

接着创建一个主类Main

public class Main {

    public static void main(String[] args) {
        List<Test> testList = new ArrayList<>();
        
        while (true) {
            testList.add(new Test());
        }
    }
}  

运行程序,并监控电脑内存占用,发现内存占用率不断升高,直到一个限定值

技术分享图片

最后看到程序抛出内存溢出异常;那么该类问题如何定位呢?这里需要借助上述的内存分析工具以及java虚拟机调参一起定位问题所在。如下所示:

技术分享图片

-XX:+HeapDumpOnOutOfMemoryError -Xms20M -Xmx20M -XX:HeapDumpPath=D:\\liuxu

技术分享图片

 

 

 可以看到堆内存快照保存到指定目录:

技术分享图片

 

 

接下来,使用内存分析工具JProfiler打开快照,分析内存占用,从图中可以看出,出现问题的地方为Test类,进而分析出在main方法中实例化了很多Test类

技术分享图片

 

内存溢出问题分析与解决

原文:https://www.cnblogs.com/sniffs/p/11545405.html

(2)
(2)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!