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

java内存溢出

  • 内存
  • 2024-07-25 03:26:53
  • 8704

一、内存溢出怎么解决Java中常见的几种内存溢出及解决方法【场景1】:
emoryError:Javaheapspace:这是因为Java内存堆不够递归步骤等),另一个原因是存在无限个
如果Java堆内存不够,可以通过配置如下JVMschema来解决:
<-Xms3062m
<-Xmx3062m
【情况2】
​emoryError:GCoverheadlimitexceeded
【解释】:JDK6有一种新的错误,当GC花费大量时间来释放少量时间时抛出:通常是因为堆栈很窄,导致内存不足的异常。
【解决办法】:
<1.检查系统是否存在占用大量内存或者死循环的代码;
<2.通过添加JVM配置来限制内存使用:
 -XX:-UseGCOverheadLimit
[情况3]:
emoryError:PermGenspace:这是因为内存区域P不够了。MaxPermSize=128m
-XXermSize=128m
【注意】:
JVM的Perm区主要用来存储Class和Meta信息。会被放到PermGenspace中,而这块区域将是老年代,主程序Object运行过程中GC不会清除老区域,如果超过64M,这部分内存就会溢出。
/>[情况5]:
★emoryError:无法创建
★[原因]:堆栈空间不足以创建更多线程或创建的线程过多或堆栈空间实在太少的。
【解决办法】:由于JVM没有提供参数来提供总的堆栈空间大小,但是可以固定一个线程的堆栈;数据/BSS/内存映射段。另外,Heap和Stack空间总量是有限的,并且有增有减。如果遇到这个错误,可以通过两种方式解决:1.通过-Xss启动参数减少一个堆栈的线程大小,这样就可以开启更多的线程(当然也不能太小,小了就会。2.通过-Xms-Xmx这两个参数减少堆栈大小和堆栈中的内存(只要你有足够的空间),或者方法调用太多(比如无限递归调用),或者线程堆栈太窄。