java.lang.OutOfMemoryError异常解决方法

原因:
常见的有以下几种:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小;

常见错误提示:
1.tomcat:java.lang.OutOfMemoryError: PermGen space 
2.tomcat:java.lang.OutOfMemoryError: Java heap space
3.tomcat:java.lang.OutOfMemoryError: unable to create new native thread
4.weblogic:Root cause of ServletException java.lang.OutOfMemoryError
5.resin:java.lang.OutOfMemoryError
6.java:java.lang.OutOfMemoryError

分为两种情况:
1、用dos窗口启动tomcat
Windows下,在文件{tomcat_home}/bin/catalina.bat
在文件开头可增加如下设置:
set JAVA_OPTS=-Xms512m -Xmx512m -Xss1024k -XX:MaxNewSize=256M -XX:MaxPermSize=256M
Unix/Linux下,在文件{tomcat_home}/bin/catalina.sh的前面,可增加如下设置:
JAVA_OPTS=‘-Xms512m -Xmx512m -Xss1024k -XX:MaxNewSize=256M -XX:MaxPermSize=256M‘
各参数释义:
-Xms:程序初始化的时候内存栈的大小。
-Xmx:应用程序(不是jvm)能够使用的最大内存数,这个值也不应该设置过大,超过机器内存。否则,tomcat会无法启动。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xss:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M。
-XX:MaxPermSize:设置持久代大小
-XX:NewSize:设置年轻代大小

2、tomcat做为系统服务
修改tomcat路径下bin文件夹下service.bat文件
找到"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions
在后面的双引号""中间添加:-Xms512M;-Xmx1024M;-XX:NewRatio=3;-XX:PermSize=256M;-XX:MaxPermSize=512M;-XX:-UseGCOverheadLimit;
然后卸载掉服务,重新安装一遍,启动,生效。

-----------------------------------------------------
1、java.lang.OutOfMemoryError: unable to create new native thread
常见出现在进行
set JAVA_OPTS=-Xms512m -Xmx512m -Xss1024k -XX:MaxNewSize=256M -XX:MaxPermSize=256M
设置后
JVM申请的heap会占用相同大小的地址空间(address space)。在Windows 32位操作系统中,分配给每个程序的地址空间只有2GB(当然也有3GB的开关)。
而每个不同的JVM的堆和其创建的进程栈都依赖于同一个进程地址空间,所以这也是此消彼长的原因。 
有方法可以提高创建线程的数量: 减少单个线程栈的大小,在JVM启动中使用-Xss参数。
建议
set JAVA_OPTS=-Xms512m -Xmx512m -Xss512k -XX:MaxNewSize=256M -XX:MaxPermSize=256M

2、Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
常见出现在进行
在后面的双引号""中间添加:-Xms512M;-Xmx1024M;-XX:NewRatio=3;-XX:PermSize=256M;-XX:MaxPermSize=512M;-XX:-UseGCOverheadLimit;
设置后
JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。
一般是因为堆太小。导致异常的原因:没有足够的内存。
建议
在双引号""中间添加一个-XX:-UseGCOverheadLimit;

时间: 2024-10-29 03:42:19

java.lang.OutOfMemoryError异常解决方法的相关文章

sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class异常解决方法

package com.wzs; import java.lang.reflect.ParameterizedType; public class T1<T> {     private Class classt;     public T1() {         ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();         this.classt = (Class)

关于 java 上传,下载和导入报java.lang.IllegalStateException异常解决办法

java.lang.IllegalStateException异常解决办法 最近在使用response.sendRedirect()时出现如下错误:java.lang.IllegalStateException            org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:423) 经过分析.查看jdk文档终于找到解决的办法,在response.sendRedirect()方法后加

java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(**_jsp.java)tomcat启动异常解决方法

今天遇到的其他一个问题就是,启动tomcat时,报:java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(index_jsp.java)异常,因为我刚刚配置服务器,以为JSP页面出现了问题,不过写了一个空的JSP页面依旧是,后来才知道,jar包冲突导致的,我在tomcat的lib目录下放了jsp-api.jar的jar包,而项目中最初也一直有一个这个jar包,方法产生了冲突.解决办法就是删除掉项目里WEB-INF/lib下

(转)Android工程出现 java.lang.NoClassDefFoundError错误解决方法

在Eclipse中,导入Android工程,工程没有报错,运行时,出现 java.lang.NoClassDefFoundError类没有找到的错误.从问题上可以看出是导入包出错的原因.遂百度加谷歌. 问题出在:ADT高版本的原因 把引入的第三方包放在Referenced Libraries中,ADT升级到17后就出现了Android Dependencies,所以如果程序中引入的第三方包没有在Android Dependencies中时,就会报文章开头的错. 解决方法: 先移除之前的Refer

访问jsp报HTTP Status 500 - java.lang.NullPointerException的解决方法

当用Eclipse开发web时,因为没有servlet和jsp的jar包,无法顺利的进行开发工作,而当把jar包放入webapps的lib目录中后,项目中的servlet和jsp的jar包会和tomcat中的jsp和servlet包冲突,会造成访问任何的jsp页面,都会报"HTTP Status 500 - java.lang.NullPointerException"的错误 解决方法:在maven的web项目中(或者通过Eclipse建立的web project),不要在pom文件中

Maven打包时出现“Show Console View”错误弹出框,错误详情为“An internal error has occurred. java.lang.NullPointerException”的解决方法

今天为项目打包时出现了下面的错误提示: 打开Details里面写的是“An internal error has occurred. java.lang.NullPointerException”.在网上搜索了一下,找到了解决方法,特此记录一下. 解决方法: 1.关闭eclipse等开发环境: 2.找到对应工程所在工作空间的配置文件.metadata,按照下面路径:*\.metadata\.plugins\org.eclipse.core.runtime\.settings,把settings文

Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See

Maven项目下java.lang.ClassNotFoundException的解决方法

问题背景: Maven的project下,项目中已经引用了相应的jar包.Java class中没有语法错误,在执行时报ClassNotFound.检查了Maven的pom.xml,依赖引入正常. 错误原因: 进入到tomcat的部署路径C:\eclipseworkspare\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\evm-gui\WEB-INF\lib下检查一下,发现lib文件夹下确实没有相应的jar包. 解

java.lang.ClassNotFoundException的解决方法

出现这个问题的原因可能很多,但是最终原因都是部署的项目文件中没有这个类包. 那么出错的点在哪呢?逐一排除! 1.首先在项目文件中没有添加相应的jar包,可以在maven dependencis文件夹中看是否有.如果没有,在pom文件添加依赖配置即可:如果有,还是出现问题转第二步 2.在maven的本地仓库中找到对应的jar包文件,双击试图打开它,如果出现报错说文件已经损坏或者不完整(我猜测可能是以前maven下载的时候因为网络的原因中途断掉没有下载完成, 下次pom在maven仓库引入本地jar