`

关于java.lang.OutOfMemoryError:java heap space错误解决方案

    博客分类:
  • java
 
阅读更多
//首先检查程序有没有限入死循环

  这个问题主要还是由这个问题 java.lang.OutOfMemoryError: Java heap space 引起的。第一次出现这样的的问题以后,引发了其他的问题。在网上一查可能是JAVA的堆栈设置太小的原因。

  跟据网上的答案大致有这两种解决方法:

  1、设置环境变量

  解决方法:手动设置Heap size

  修改TOMCAT_HOME/bin/catalina.sh

  set JAVA_OPTS= -Xms32m -Xmx512m

  可以根据自己机器的内存进行更改。

  2、java -Xms32m -Xmx800m className

  就是在执行JAVA类文件时加上这个参数,其中className是需要执行的确类名。(包括包名)

  这个解决问题了。而且执行的速度比没有设置的时候快很多。

  如果在测试的时候可能会用Eclispe 这时候就需要在Eclipse ->run -arguments 中的VM arguments 中输入-Xms32m -Xmx800m这个参数就可以了。

  后来在Eclilpse中修改了启动参数,在VM arguments 加入了-Xms32m -Xmx800m,问题解决。

  一、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 文档重复占用内存的目的。

  二、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"

  三、实例,以下给出1G内存环境下java jvm 的参数设置参考:

  JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

  很大的web工程,用tomcat默认分配的内存空间无法启动,如果不是在myeclipse中启动tomcat可以对tomcat这样设置:

  TOMCAT_HOME\bin\catalina.bat 中添加这样一句话:

  set JAVA_OPTS= -Xmx1024M -Xms512M -XX:MaxPermSize=256m

  如果要在myeclipse中启动,上述的修改就不起作用了,可如下设置:

  Myeclipse->preferences->myeclipse->servers->tomcat->tom cat×.×->JDK面板中的

  Optional Java VM arguments中添加:-Xmx1024M -Xms512M -XX:MaxPermSize=256m 海柳 烟嘴 正品

  在myeclipse中启动Tomcat时,提示"ava.lang.OutOfMemoryError: Java heap space",解决办法就是:

  Myeclipse->preferences->myeclipse->servers->tomcat->tom cat×.×->JDK面板中的

  Optional Java VM arguments中添加:-Xmx1024M -Xms512M -XX:MaxPermSize=256m

  //以上是转载 

  我遇到的错误是在myeclipse中启动Tomcat时,提示"ava.lang.OutOfMemoryError: Java heap space"

  以上三点我都试过了 就是不知道自己的代码从哪里进入死循环  我运用的是struts,hibernate,spring

  根据错误提示JSONWrite 找到自己项目下pojo下hibernate的映射文件

  eg:

  有两张关联的表 生成两个相联的实体类 和映射文件 PersonInfomation和StateOffice

  因为映射文件和实体类是从数据库表自动生成的  所以都是自动生成双向的关系

  在PersonInfomation中private PersStateOffice persStateOffice;

  并且在StateOffice中private Set<PersPersonInformation> persPersonInformations = new HashSet<PersPersonInformation>(

  0);

  所以在封装json数据的时候就会出现死循环现象 不断的从两个实体类中封装 导致内存溢出

  解决方案 1 取消StateOffice中的关联 2手动封装json数据(为了不让查询数据出现错误与冲突 我选择手动封装json数据)

  eg://获取任职类型

  public String loadOfficeType() throws Exception { 

  PrintWriter out = response.getWriter(); 

  typeOfficeList=officeTypeService.getOfficeType(); 

  out.print("{typeOfficeList:["); 

  for(int i=0;i<typeOfficeList.size();i++){ 

  out.print("{typeOfficeId:'"+typeOfficeList.get(i). getTypeOfficeId()+"',"); 

  out.print("typeOffice:'"+typeOfficeList.get(i).get TypeOffice()+"'}"); 

  if(i!=typeOfficeList.size()-1){ 

  out.print(","); 

  } 

  } 

  out.print("]}"); 

  return null; 

  } 
分享到:
评论

相关推荐

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    **描述:“搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space”** - 描述提到了对这个问题的相关资料进行整理,这意味着该文档将提供如何识别、分析并解决此类问题的方法。 #### 详细解析 ...

    java.lang.OutOfMemoryError: Java heap space 解决方法

    "Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...

    Myeclipse下java.lang.OutOfMemoryError Java heap space的解决

    ### Myeclipse下java.lang.OutOfMemoryError: Java heap space的解决方案 在使用Myeclipse进行Java开发时,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这个错误提示。这种异常通常发生在应用程序占用...

    java解决nested exception is java.lang.OutOfMemoryError Java heap space

    Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...

    编译时出现java.lang.OutOfMemoryError Java heap space异常

    ### 编译时出现java.lang.OutOfMemoryError Java heap space异常 #### 一、问题概述 在进行Java项目编译的过程中,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这种异常。这类异常通常表明Java虚拟机...

    java.lang.OutOfMemoryError解决办法

    当应用程序加载大量类或者使用了大量的静态变量和常量时,PermGen space可能会耗尽,从而引发`java.lang.OutOfMemoryError: PermGen space`错误。对于频繁部署或重载JSP的Web应用,如Tomcat,这个问题尤为常见。 ...

    记录java.lang.OutOfMemoryErrorJava heap space的情况.docx

    在Java程序中,`java.lang.OutOfMemoryError: Java heap space` 是一个常见的错误,意味着程序在运行过程中耗尽了JVM分配的堆内存。这个错误通常发生在创建大量对象或者单个对象占用过多内存时。 一、问题描述与...

    java[1].lang.OutOfMemoryError_Java_heap_space错误及处理办法

    ### Java.lang.OutOfMemoryError:Java Heap Space 错误及处理办法 在Java应用程序开发与维护过程中,经常会遇到`java.lang.OutOfMemoryError: Java heap space`这一异常情况。该异常通常表明Java虚拟机(JVM)的堆...

    java.lang.OutOfMemoryError处理错误

    java.lang.OutOfMemoryError处理错误 java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,...java.lang.OutOfMemoryError是Java虚拟机中的一种常见错误,解决这种错误需要根据实际情况进行分析和解决。

    java.lang.OutOfMemoryError 解决方法

    java.lang.OutOfMemoryError: Java heap space 解决方法

    Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException)

    "java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError" 是一个典型的错误提示,它表明在并发执行过程中遇到了内存不足的问题。下面我们将深入探讨这个问题的原因、影响以及如何解决。 内存溢出...

    Eclipse中通过Tomcat运行J2EE项目java.lang.OutOfMemoryError PermGen space的解决方案

    Eclipse 中通过 Tomcat 运行 J2EE 项目 java.lang.OutOfMemoryError PermGen space 的解决方案 在 Eclipse 中通过 Tomcat 运行 J2EE 项目时,可能会出现 java.lang.OutOfMemoryError: PermGen space 异常,这是由于...

    Tomcat给我的java.lang.OutOfMemoryError: PermGen

    本文将针对两种常见的Java内存溢出错误——`java.lang.OutOfMemoryError: PermGen space`和`java.lang.OutOfMemoryError: Java heap space`进行详细的分析和解决方案的探讨。 首先,我们来看`java.lang....

    完美解决java.lang.OutOfMemoryError处理错误的问题

    Java中的`java.lang.OutOfMemoryError`是一种常见的运行时错误,通常表示应用程序在尝试分配新的内存对象时,Java虚拟机(JVM)无法找到足够的连续内存空间来完成操作。这个错误可能由多种原因引起,主要分为堆内存...

    OutOfMemoryError_8种典型案例分享

    java.lang.OutOfMemoryError是Java开发者在工作中经常会遇到的一个内存错误。该错误通常发生在JVM无法为新对象分配足够的堆内存时。由于内存问题导致的程序崩溃给开发和维护带来了极大的挑战,而解决这类问题需要对...

    java.lang.OutOfMemoryError: PermGen space

    在Java编程中,我们常常会遇到一个让人头疼的问题,那就是“java.lang.OutOfMemoryError: PermGen space”错误。这个错误提示表明,应用程序在运行过程中,内存的永久代(Permanent Generation)空间不足,导致了...

    内存不足OOM java.lang.OutOfMemoryError.

    Java中的“内存不足OOM (Out Of Memory):java.lang.OutOfMemoryError”是一个常见的运行时错误,它表示Java虚拟机(JVM)在尝试分配新的对象或数据结构时,发现系统内存不足以完成此操作。这个问题通常发生在程序...

    解决Java_heap_space问题

    当程序创建的对象过多或单个对象占用内存过大时,如果没有足够的空闲内存来分配新对象,JVM就会抛出“OutOfMemoryError: Java heap space”错误。这可能是由于以下原因造成的: 1. **初始堆大小设置不当**:默认...

Global site tag (gtag.js) - Google Analytics