0


Java内存溢出(outofmemory:Java heap space)更改堆大小

背景

在跑一个项目的时候需要构建大量对象,导致出现内存溢出错误。去网上查需要修改堆大小,于是按照网上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中再加上你的修改,然后应用。

再运行程序,通过visual vm观察堆内存分配,发现okok,按照自己的配置分配内存了。完整的程序执行一遍,顺利顺利,没有内存溢出了。
至此,这个问题终于搞定了。。。(开心)

总结

  • 之前遇到内存溢出问题的时候,也上网搜了好多答案,但是怕麻烦,所以一直拖着没有解决。今天逼着自己必须把它搞定,无论网上说的什么方法我都尝试,才有决心攻克难关。
  • 今天也学习了visual vm的使用,之前在网上看到相关用工具分析堆内存的帖子就退出去,还是畏难吧,今天按照教程打开了工具,下载了插件,发现也没有那么难,对jvm也有了新的理解。
  • 这次问题的排查过程,独立也不独立,希望以后遇到困难不要害怕,勇敢解决!
标签: java jvm intellij-idea

本文转载自: https://blog.csdn.net/qq_43606345/article/details/128763092
版权归原作者 寂寞笙歌凉 所有, 如有侵权,请联系我们删除。

“Java内存溢出(outofmemory:Java heap space)更改堆大小”的评论:

还没有评论