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

java循环内存溢出(javacv内存溢出)

  • 内存
  • 2024-08-14 11:36:32
  • 3288

一、Java内存溢出主要有哪些类型?主要有三种
第一种OutOfMemoryError:PermGenSpace
该问题的基本目的是程序中使用了大量的jar或类,导致空间不足,无法将类加载到Java虚拟机中空间被创建。,属于PermanentGenerationSpace。解决此类问题有两种方法:
1.增大Java虚拟机中XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久存储区域大小,XX:MaxPermSize是最大永久存储区域。例如,对于tomcat6.0,在或文件中一系列环境变量名语句的末尾添加一行(大约第70行):
JAVA_OPTS='-XX:PermSize=64M-XX:MaxPermSize=128m"
如果是Windows服务器,也可以在系统环境变量中设置。我认为Sprint+Struts+Hibernate架构使用Tomcat来发布程序。这种类型的内存使用上面的方法,我成功解决了Tomcat服务器频繁宕机的问题。
第二个OutofMemoryError:Javaheapspace
这个问题的原因是Java虚拟机在分配的堆内存空间中创建了太多的对象。虚拟机是完整的,属于堆空间。解决此类问题有两种思路:
1.检查程序是否存在无限循环或不必要的重复创建大量对象。找到原因后,修改程序和算法。
当我使用K-means文本聚类算法编写文本聚类程序,对数千条文本记录(每条记录包含大约10个特征向量)进行文本聚类时,由于程序描述的问题,Javaheapspace的内存溢出后来通过修改程序解决了问题。
2.增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。例如:setJAVA_OPTS=-Xms256m-Xmx1024m
第三种OutOfMemoryError:Untabletocreatenewnativethread
当有多个Java线程时,很可能会出现这种错误。
二、Java内存溢出的原因有哪些【情况一】:
emoryError:Javaheapspace:这是因为java堆内存不够,一个原因是不够,另一个原因是程序中存在死循环;
如果是javastack空间不够的话,可以通过调整如下JVM配置来解决:
-Xms3062m
-Xmx3062m
【情况2】
emoryError:GCoverheadlimitexceeded
【说明】:JDK6新增了一个错误类型,该错误类型为当GC需要很长时间才能释放一小块空间时抛出通常是因为堆太小,导致异常的原因是内存不够。
[解决办法]:
1.检查系统是否存在使用大内存或无限循环的代码;
2.通过添加JVM配置来限制内存使用:
-XX:-UseGCOverheadLimit