当前位置:首页 > 内存 > 正文

jvm内存溢出的原因(jvm内存溢出该如何定位解决)

  • 内存
  • 2024-05-28 10:27:54
  • 7621

一、Java内存溢出的解决方案都有哪些内存溢出可能由以下原因引起:
加载到内存的数据量太大,比如一次从数据库中取出太多数据;
调用接口超时并且timeout超时时间设置太长;集合类中有该对象的引用,使用后没有删除,因此JVM无法回收它;
存在死循环代码或者循环创建过多的重复对象实体;
启动参数内存值设置太小;
那么解决方案有针对性:
优化数据库查询语句,比如改为分页查询;
设置时序缩短调用接口的等待时间,打印错误日志并修复接口超时;
使用后将集合类设置为null,例如实现list后写入list=null;
使用调试逐步进行找到无限循环的代码
增加jvm内存的值:-Xms1024m-Xmx1024m-XX:MaxNewSize=1024m-XX:MaxPermSize=1024m(给定的值根据服务器内存的大小来设置)
完全手写,希望能应用。


二、JVM内存溢出的两大类型及解决方案

你知道如何解决JVM内存溢出问题吗?这里想跟大家分享一下,JVM处理堆和非堆两种内存,供开发者启动时由JVM本身用来存储类信息

JVM内存溢出详细解决方案

JVM内存溢出类型

javalangOutOfMemoryError:PermGenspace

<.p>JVM管理两种类型的Java内存:堆和非堆。上面提到的是非堆是JVM启动时创建的,用于存储类信息,GC在运行堆的不同时期不会释放空间,如果Web应用程序使用大量第三方jar或应用程序太多很多class文件和MaxPermSize设置太小,也会导致这个内存不足。太忙,导致JVM内存溢出或者tomcat热部署时,不会清理之前加载的环境,只会将上下文改为新部署的非栈内容。

一个最佳配置示例(本人确认,自从使用此配置后,tomcat从未死机))

setJAVA_OPTS=Xmsm

:javalangOutOfMemoryError:Javaheapspace

我们来看看JVM内存溢出的第二种情况。第一种情况是补充。Xmx)是物理内存/如果剩余内存小于%,JVM会将堆增加到Xmx设置的值。如果剩余内存超过%,JVM会将堆减少到Xms设置的值,因此Xmx开启。服务器Xms设置一般应设置相同,以避免每次GC后调整虚拟机堆的大小。假设物理内存无限大,与机器操作系统相关的JVM内存最大值在g到g之间,但是bit大小不会有限制

垃圾收集GC的作用

JVM调用GC的频率还是很高的。垃圾收集主要在两种情况下进行

当应用程序线程空闲时和另一种是当java内存堆不足时。如果连续回收不能解决内存堆不足的问题,就会报内存错误。因为这种异常是由系统的运行环境决定的,所以无法预测什么时候会出现。根据GC机制,程序的执行会导致系统工作发生变化,从而增加GC被触发的机会

lishixinzhi/Article/program/Java/hx/201311/26579。