如何解决java.lang.OutOfMemoryError

作者&投稿:陈柏 (若有异议请与网页底部的电邮联系)
如何解决java.lang.OutOfMemoryError~

Java常见的几种内存溢出及解决方法【情况一】:
java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一个原因是程序中有死循环;
如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决:
-Xms3062m
-Xmx3062m
【情况二】
java.lang.OutOfMemoryError:GCoverheadlimitexceeded
【解释】:JDK6新增错误类型,当GC为释放很小空间占用大量时间时抛出;一般是因为堆太小,导致异常的原因,没有足够的内存。
【解决方案】:
1、查看系统是否有使用大内存的代码或死循环;
2、通过添加JVM配置,来限制使用内存:
-XX:-UseGCOverheadLimit

1.应用服务器提示错误的解决:
把启动参数内存值设置足够大。

2.Java代码导致错误的解决:
重点排查以下几点:
1)检查代码中是否有死循环或递归调用。
2)检查是否有大循环重复产生新对象实体。
3)检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
4 )检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。


tomcat中java.lang.OutOfMemoryError: Java heap space异常处理
一、Heap size
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,
其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

二、解决方法:手动设置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"


tomcat中java.lang.OutOfMemoryError: PermGen space异常处理
一、PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决java.lang.OutOfMemoryError的方法有如下几种:
一、增加jvm的内存大小。方法有: 1)在执行某个class文件时候,可以使用java -Xmx256M aa.class来设置运行aa.class时jvm所允许占用的最大内存为256M。 2)对tomcat容器,可以在启动时对jvm设置内存限度。对tomcat,可以在catalina.bat中添加:
set CATALINA_OPTS=-Xms128M -Xmx256M
set JAVA_OPTS=-Xms128M -Xmx256M

或者把%CATALINA_OPTS%和%JAVA_OPTS%代替为-Xms128M -Xmx256M
3)对resin容器,同样可以在启动时对jvm设置内存限度。在bin文件夹下创建一个startup.bat文件,内容如下:
@echo off
call "httpd.exe" "-Xms128M" "-Xmx256M"
:end

其中"-Xms128M"为最小内存,"-Xmx256M"为最大内存。
二、 优化程序,释放垃圾。
主要包括避免死循环,应该及时释放种资源:内存, 数据库的各种连接,防止一次载入太多的数据。导致java.lang.OutOfMemoryError的根本原因是程序不健壮。因此,从根本上解决Java内存溢出的唯一方法就是修改程序,及时地释放没用的对象,释放内存空间。 遇到该错误的时候要仔细检查程序,嘿嘿,遇多一次这种问题之后,以后写程序就会小心多了。
Java代码导致OutOfMemoryError错误的解决:
需要重点排查以下几点:
检查代码中是否有死循环或递归调用。
检查是否有大循环重复产生新对象实体。
检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
tomcat中java.lang.OutOfMemoryError: PermGen space异常处理
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。 解决方法: 手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh在
echo "Using CATALINA_BASE: $CATALINA_BASE"

上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m

建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。
weblogic中java.lang.OutOfMemoryError异常处理
错误提示: Root cause of ervletException java.lang.OutOfMemoryError 解决办法:调整bea/weblogic/common中CommEnv中参数
:sun
  if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode
  set JAVA_VM=-client
  set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m
  set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
  goto continue
  :sun_prod_mode
  set JAVA_VM=-server
  set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m
  goto continue

Resin下java.lang.OutOfMemoryError异常处理
产生内存溢出的原因:
出现这个错误,一般是因为JVM物理内存过小。默认的Java虚拟机最大内存仅为64兆,这在开发调试过程中可能没有问题,但在实际的应用环境中是远远不能满足需要的,除非你的应用非常小,也没什么访问量。否则你可能会发现程序运行一段时间后包java.lang.OutOfMemoryError的错误。因此我们需要提升resin可用的虚拟机内存的大小。
解决方法:
修改/usr/local/resin/bin/httpd.sh中的args选项 添加参数-Xms(初始内存)和-Xmx(最大能够使用内存大小)可以用来限制JVM的物理内存使用量。例如:
args="-Xms128m -Xmx256m"

设置后,JVM初始物理内存是128m,最大能使用物理内存为256m。
这两个值应该由系统管理员根据服务器的实际情况进行设置。

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

重点排查以下几点:
1)检查代码中是否有死循环或递归调用。
2)检查是否有大循环重复产生新对象实体。
3)检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
4 )检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

如果你的程序代码合理,不是死循环之类的,就加内存条吧。


java是什么意思
而Java语言也如同咖啡一般醇香动人。[编辑本段]Java语言特点 Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。 当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。那么Java到底有何神奇之处呢? Java语言其实最早诞生于1991年,起初被...

java培训主要学什么?
java培训主要学习认识计算机的基本知识。如需学习java推荐选择【达内教育】,该机构致力于面向IT互联网行业,网络营销工程师、会计等职场人才,拥有行业内完善的教研团队,强大的师资力量,确保学员利益,全方位保障学员学习。java培训主要学的具体如下:1、【Java语言基础知识】的学习与应用,掌握常见的数据...

Java 里的final关键字可以用于什么场合 各有什么作用
Java中的final关键字有什么用 可以宣告成员变数、方法、类以及本地变数。一旦你将引用宣告作final,你就不能改变这个引用了。String 类就是一个 final 型别的类 final关键字有何作用 final 放在类前面 如果某个类在定义时,前面有修饰词final,则该类不能被继承 final 放在属性前面 属性宣告时,如果前面有修饰词fina...

java 中import java.util.List(Ljava.lang.Integer;); 这个是干什么的...
import表示引入某个类或者文件。正确写法应该是import java.util.List;说明程序中要用到List这个类的相关方法,如果没有用到List这个类,当然可以不加这一句。如果用到而不加这个引用,则会出现编译时错误。Ljava.lang.Integer;这个应该是不正确的,除非是自己写的包。如果想引入java.lang.Integer,这...

请教怎么把下面java代码嵌入到jsp中
不是实际指出的那行,还要找编译好的对应的servlet)让上面代码运行,把它改写为一个类或Beanl就可以了,其实也就一分钟的事儿,把main改成函数,然后在jsp里面import它,new一个bean类,调用这个方法,很快,还好调试,何乐而不为呢?其实还有更好的封装方法,等你用了hibernate就知道了。

请介绍一下java
详情请查看视频回答

高分java连接SQL server 2000 详细步骤
3,现在就是代码了,如下:import java.sql.*;public class L{public static void main(String[] args){ String sql; Connection conn; Statement stmt; ResultSet rs; try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); String url="jdbc:microsoft:sqlserver:\/\/localhost:1433...

java是什么意思?
Java在嵌入式领域的发展有着广阔的空间。在这样平台上,只需130KB就可以很好使用Java技术。“什么样的人适合学Java?”● 逻辑思维能力强 对于Java来说所有功能都是通过编写代码实现的,需要开发人员具备较强的逻辑性和运算性。● 端正心态、踏实耐心 在平时的工作中会有一大部分时间是花费在解决bug上,...

Java书籍推荐有哪些
书是永远都读不完的,但是知识可以是自己的,只有选择适合你自己的书单,才是最佳的解决方案。有些书籍是因为当时有项目需要用到这方面技术才需要看的,比如云计算和大数据相关的书籍,单纯的Java学习者可以忽略这方面的书籍,特此提醒。 1. 《程序员修炼之道》(推荐67%) The Pragmatic Programmer:From Journeyman to Ma...

在新建虚拟机时出现问题?
-m同时打印java和本地(native)线程栈信息,m是mixed mode的简写 -l打印锁的额外信 作者:楚瑞涛 https:\/\/blog.csdn.net\/cong___cong\/article\/details\/106349866 公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作...

宜阳县13277459244: 如何解决java.lang.OutOfMemoryError -
连伟复方: 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的...

宜阳县13277459244: 我在写代码中出现这2中错误java.lang.ClassNotFoundException,java.lang.OutOfMemoryError怎么解决? -
连伟复方: 第一个是转换类异常 java.lang.ClassNotFoundException,转换的目的类不存在就会导致此异常产生.第二个是内存不足 java.lang.OutOfMemoryError,当运行一个程序的时候,手机的可用内存不足以让java虚拟机给一个对象内存空间时就会出现.

宜阳县13277459244: 程序运行一段时间会报这个错误<java.lang.OutOfMemoryError: Java heap space>,怎么解决? -
连伟复方: 内存溢出!好好检查你的代码,看看是哪里把内存消耗完了.比如进行死循环、查数据库的时候,结果集太大都会出现这种情况

宜阳县13277459244: java.lang.OutOfMemoryError 怎样才能不让程序退出解决思路 -
连伟复方: .但有些文件那个方法是无法打开的,用 for 循环打开,关闭.但到那个无法打开的文件时候会报java.lang. OutOfMemoryError,然后程序会退出.怎么才能不要退出程序,只是打印出 无法打开,而继续打开下一个文件. 另外开一个线程来打开...

宜阳县13277459244: 如何解决java.lang.OutOfMemoryError -
连伟复方: 1、给电脑加内存.(这个买了加上就是了)2、内存足够了 如果程序吃内存很厉害的话 在设置tomcat或weblogic等应用服务器的内存.(百度一下 一大把,千篇一律)3、尽可能的优化你...

宜阳县13277459244: 如何解决内存溢出?java.lang.OutOfMemoryError: PermGen space -
连伟复方: java.lang.OutOfMemoryError: PermGen space 这个错误是java虚拟机内存溢出 把你的机器物理内存比作脸盆,JVM比作放在脸盆里面的一个杯子 你的情况就类似脸盆还能放很多水,但是杯子里面的水已经满出来了 我觉得你要解决这个问题,先要看这个错误是那个程序出的,是java游戏还是b0t.然后看看该程序有没有设置JVM内存大小的配置.如果没有,是这个程序自己的问题,要解决需要联系作者 好比你先找到是哪个杯子满出来,然后看看能不能加大杯子的容量

宜阳县13277459244: 求手机游戏出现java.lang.outofmemoryerror的解决方法 -
连伟复方: 你手机的内存不够了吧.删掉一些没用的东西,关掉没用的程序,再开启游戏.

宜阳县13277459244: java.lang.OutOfMemoryError: Java heap space如何解决? -
连伟复方: 1、在D:/apache-tomcat-6.0.18/bin/catalina.bat最前面加入:set JAVA_OPTS=-Xms384m -Xmx384m注意:只有startup.bat启动tomcat,设置才能生效,如果利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms384m -Xmx384m没起作用2、在Eclilpse中修改启动参数,在VM arguments 加入了-Xms384m -Xmx384m,设置如下图所示

宜阳县13277459244: 求助:打开手机游戏出现java.lang.outofmemoryerror是怎么回事,如何解决 -
连伟复方: java程序错误.错误的意思是:内存溢出.你可以将手机中的多余图片信息或其他信息删除点试试,不行就重新下载一个游戏再试试.

宜阳县13277459244: 发布war包时出现了java.lang.outofmemoryerror的错误,怎么解决呢?这跟服务器中间件,服务器有什么关联 -
连伟复方: 内存溢出.你是什么链接没有关掉吧.比如说数据库链接没有关掉.吃掉了大量的内存.如果不是程序的问题的话.建议你重新发布一下.将原来的清除掉.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网