【情况一】:
java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环;
如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决:
<jvm-arg>-Xms3062m</jvm-arg>
<jvm-arg>-Xmx3062m</jvm-arg>
【情况二】
java.lang.OutOfMemoryError: GC overhead limit exceeded
【解释】:JDK6新增错误类型,当GC为释放很小空间占用大量时间时抛出;一般是因为堆太小,导致异常的原因,没有足够的内存。
【解决方案】:
1、查看系统是否有使用大内存的代码或死循环;
2、通过添加JVM配置,来限制使用内存:
<jvm-arg>-XX:-UseGCOverheadLimit</jvm-arg>
【情况三】:
java.lang.OutOfMemoryError: PermGen space:这种是P区内存不够,可通过调整JVM的配置:
<jvm-arg>-XX:MaxPermSize=128m</jvm-arg>
<jvm-arg>-XXermSize=128m</jvm-arg>
【注】:
JVM的Perm区主要用于存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space,这个区域成为年老代,GC在主程序运行期间不会对年老区进行清理,默认是64M大小,当程序需要加载的对象比较多时,超过64M就会报这部分内存溢出了,需要加大内存分配,一般128m足够。
【情况四】:
java.lang.OutOfMemoryError: Direct buffer memory
调整-XX:MaxDirectMemorySize= 参数,如添加JVM配置:
<jvm-arg>-XX:MaxDirectMemorySize=128m</jvm-arg>
【情况五】:
java.lang.OutOfMemoryError: unable to create new native thread
【原因】:Stack空间不足以创建额外的线程,要么是创建的线程过多,要么是Stack空间确实小了。
【解决】:由于JVM没有提供参数设置总的stack空间大小,但可以设置单个线程栈的大小;而系统的用户空间一共是3G,除了Text/Data/BSS /MemoryMapping几个段之外,Heap和Stack空间的总量有限,是此消彼长的。因此遇到这个错误,可以通过两个途径解决:1.通过 -Xss启动参数减少单个线程栈大小,这样便能开更多线程(当然不能太小,太小会出现StackOverflowError);2.通过-Xms -Xmx 两参数减少Heap大小,将内存让给Stack(前提是保证Heap空间够用)。
【情况六】:
java.lang.StackOverflowError
【原因】:这也内存溢出错误的一种,即线程栈的溢出,要么是方法调用层次过多(比如存在无限递归调用),要么是线程栈太小。
【解决】:优化程序设计,减少方法调用层次;调整-Xss参数增加线程栈大小。
相关推荐
JAVA内存溢出问题总结 JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题...
检查Java内存泄露的方法主要包括以下几个步骤: 1. **生成堆转储文件**:在Linux环境中,可以使用JVM提供的`jmap`命令生成堆转储文件。例如,如果Java进程的PID为12345,可以执行`jmap -dump:format=b,file=heap...
为了避免内存溢出,可以采取以下几种策略: - **合理设置JVM参数**:根据应用程序的实际需求调整-Xms、-Xmx、-XX:MaxPermSize等参数,确保既不过分占用资源也不因资源不足而导致错误。 - **代码优化**:避免在代码...
Java内存溢出问题,全称为Java OutOfMemoryError,是Java开发者经常遇到的运行时异常。内存溢出通常发生在程序运行过程中,系统无法为运行的应用程序分配足够的内存资源,导致程序无法正常执行。理解并解决Java内存...
这种情况通常会导致程序崩溃,因此理解如何解决Java程序的内存溢出至关重要。以下是一些关键的知识点和解决策略: 1. **了解内存结构**:Java内存主要分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)...
在Java开发中,当面临大批量数据导出到Excel文件时,可能会遇到内存溢出的问题。这是因为Excel文件格式本身的设计,以及Java默认处理大数据的方式,可能导致内存占用过高,尤其是在一次性加载大量数据到内存中进行...
本文将介绍 Java 中的几种常见的内存溢出和解决方案。 1.JVM Heap(堆)溢出: JVM Heap(堆)溢出是 Java 中最常见的一种内存溢出错误。它发生在 JVM 的堆空间不足时,无法满足程序的内存需求。解决方法是手动...
根据内存溢出的位置不同,可以将Java内存溢出分为以下几种类型: - **堆内存溢出**:最常见的一种内存溢出类型,通常由于对象长时间未被垃圾回收导致。 - **方法区溢出**:当方法区无法再创建新的类时,就会发生方法...
"详解Java内存溢出的几种情况" Java 内存溢出是指 Java 程序在运行时,内存使用超出了系统的限制,导致程序崩溃或抛出异常的现象。Java 中有多种类型的内存溢出,包括栈内存溢出、堆内存溢出、永久代溢出等。 栈...
内存溢出是指程序运行时申请的内存超过了系统能提供的可用内存,导致程序无法继续执行的一种异常状态。本文将详细介绍如何在使用MyEclipse或Eclipse开发工具时,解决Java应用中的Tomcat内存溢出问题。 #### 一、...
在处理Java内存溢出问题时,除了使用上述工具外,还需要理解以下几个关键概念: 1. 堆内存:Java对象主要存储在堆内存中,过大或过多的对象可能导致堆溢出。 2. 非堆内存:包括JVM自身使用的内存(如方法区、元空间...
为了防止加载大尺寸图片时发生内存溢出,我们可以采取以下几种方法: 1. **使用inJustDecodeBounds选项预加载图片信息**:首先设置`BitmapFactory.Options`中的`inJustDecodeBounds`属性为`true`,这样`...
要解决Jetty 8的内存溢出问题,我们可以从以下几个方面入手: 1. **调整JVM参数**:Jetty作为Java应用,依赖于Java虚拟机(JVM)进行运行。我们可以通过设置JVM启动参数来控制内存分配。关键参数包括`-Xms`(初始堆...
Java内存机制是Java虚拟机(JVM)的关键组成部分,它管理着程序运行时的数据存储。在Java中,内存主要分为以下几个区域: 1. **Heap(堆)**:这是Java中最主要的内存区域,用于存储所有的类实例和数组。当堆空间...
内存溢出通常是由以下几种情况导致的: 1. **应用程序内存消耗过高**:应用程序中存在大量占用内存的对象或数据结构,尤其是在长时间运行过程中未能有效释放不再使用的对象。 2. **默认的JVM堆内存设置不足**:默认...
针对MyEclipse中的内存溢出问题,可以采取以下几种解决策略: 1. **修改Eclipse.ini配置** - 打开MyEclipse的安装目录下的`eclipse.ini`文件。 - 修改其中的JVM参数,增加堆内存和非堆内存的大小。例如: ``` ...
1. **堆内存溢出**:当JVM堆内存无法分配新的对象时,会出现堆内存溢出。这通常是由于程序创建了过多的对象或者有大量长期驻留内存的对象未被垃圾回收器清理。 - **Xms1024m**:表示初始化堆内存大小为1024MB。 ...