背景
在跑一个项目的时候需要构建大量对象,导致出现内存溢出错误。去网上查需要修改堆大小,于是按照网上80%的方法修改了配置,结果依然内存溢出。于是,开启了半天的刨根问底之旅。
过程
第一阶段
首先是按照网上说的方法,打开idea在上方找到help,然后点击edit custom vm options,
然后就打开了下面这个文件,然后修改-Xmx,-Xms等堆内存设置,这已经是我改的乱七八糟的结果了。
然后关闭idea重启,运行程序,不行。。。
第二阶段
我开始搜索其他方法,有一个教程说,可以改settings里面的一些关于jvm的配置,重复了几次,改完后依然没有效果。
这时我开始学习借助工具分析,在jdk的bin目录下有一个程序叫jvisualvm.exe,它是jdk自带的分析工具。打开它,
打开长这样,
在你的程序启动之后,左侧栏里会有你的程序名,双击它,在右面会出现它的概述,监视等,都可以点进去。
下面就是platform的概述,可以看到我刚刚改的乱七八糟的配置。
点击监视就可以看到cpu,内存等的运行情况。
接下来,我便开始实验,发现无论怎么改vmoptions中的配置,在platform的概述中都能更新为修改后的内容。但是监视我的运行程序时发现,我的堆内存大小一点也没有变。。。并且堆的大小还没扩容到最大堆大小便开始频繁gc,最后内存溢出(开始焦虑)
第三阶段
为了搞明白为啥没用完堆内存就溢出,继续学习工具。
在刚刚的软件中点击,工具->插件->可用插件->选择visual vm并开始下载安装。这个插件可以帮助我们看到新生代,老年代等具体的内存分配情况。
安装好后,再修改配置,跑几遍程序。发现了问题所在,无论我怎么修改配置,我的新生代,老年代的大小都没变,相当于修改无效。。。而在不断的创建对象和gc中,我的老年代满了。。。(无语)
我突然想到,还可以在程序的运行配置中添加参数,修改堆内存。于是,点击上方程序(xxxApplication)的小箭头,点击edit configurations,
然后在environment下的vm options中再加上你的修改,然后应用。文章来源:https://www.toymoban.com/news/detail-528013.html
再运行程序,通过visual vm观察堆内存分配,发现okok,按照自己的配置分配内存了。完整的程序执行一遍,顺利顺利,没有内存溢出了。
至此,这个问题终于搞定了。。。(开心)文章来源地址https://www.toymoban.com/news/detail-528013.html
总结
- 之前遇到内存溢出问题的时候,也上网搜了好多答案,但是怕麻烦,所以一直拖着没有解决。今天逼着自己必须把它搞定,无论网上说的什么方法我都尝试,才有决心攻克难关。
- 今天也学习了visual vm的使用,之前在网上看到相关用工具分析堆内存的帖子就退出去,还是畏难吧,今天按照教程打开了工具,下载了插件,发现也没有那么难,对jvm也有了新的理解。
- 这次问题的排查过程,独立也不独立,希望以后遇到困难不要害怕,勇敢解决!
到了这里,关于Java内存溢出(outofmemory:Java heap space)更改堆大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!