Java堆溢出: java.lang.OutOfMemoryError: Java heap space
- /**
- * VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
- * @author zzm
- */
- ublic class HeapOOM {
- static class OOMObject {
- }
- public static void main(String[] args) {
- List<OOMObject> list = new ArrayList<OOMObject>();
- while (true) {
- list.add(new OOMObject());
- }
- }
- }
运行结果:
- java.lang.OutOfMemoryError: Java heap space
- Dumping heap to java_pid3404.hprof ...
- Heap dump file created [22045981 bytes in 0.663 secs]
http://book.51cto.com/art/201107/278889.htm
虚拟机栈和本地方法栈溢出
(java.lang.StackOverflowError)
- stack length:2402
- Exception in thread "main" java.lang.StackOverflowError
http://book.51cto.com/art/201107/278890.htm
运行时常量池溢出
(OutOfMemoryError: PermGen space at org.fenixsoft.oom.RuntimeConstantPoolOOM)
- Exception in thread "main" java.lang.
- [b]OutOfMemoryError: PermGen space[/b]
- at java.lang.String.intern(Native Method)
- at org.fenixsoft.oom.[b]RuntimeConstantPoolOOM[/b].
- main(RuntimeConstantPoolOOM.java:18)
http://book.51cto.com/art/201107/278891.htm
方法区溢出
(Caused by: java.lang.OutOfMemoryError: PermGen space )
- Caused by: [b]java.lang.OutOfMemoryError: PermGen space [/b]
- at java.lang.ClassLoader.defineClass1(Native Method)
- at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
- at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
- ... 8 more
在经常动态生成大量Class的应用中,需要特别注意类的回收状况。这类场景除了上面提到的程序使用了GCLib字节码增强外,常见的还有:大量JSP或动态产生JSP文件的应用(JSP第一次运行时需要编译为Java类)、基于OSGi的应用(即使是同一个类文件,被不同的加载器加载也会视为不同的类)等。
http://book.51cto.com/art/201107/278894.htm
本机直接内存溢出
(Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory)
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
createThread();
System.out.println(i);
}
}
private static void createThread() {
ByteBuffer bf = ByteBuffer.allocateDirect(1024 *1024 *100);
}
}
gc 日志:2017-05-14T20:02:37.074+0800: [GC [PSYoungGen: 717K->568K(5952K)] 717K->568K(19648K), 0.0060602 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 2017-05-14T20:02:37.081+0800: [Full GC (System) [PSYoungGen: 568K->0K(5952K)] [ParOldGen: 0K->485K(13696K)] 568K->485K(19648K) [PSPermGen: 2527K->2525K(21248K)], 0.0097560 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory at java.nio.Bits.reserveMemory(Bits.java:658) at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123) at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:306) at Test.createThread(Test.java:22) at Test.main(Test.java:7)
注意: 对于 DirectByteBuffer 因为不是在虚拟机分配的,full gc 日志 体现不了 日志回收的情况
这样分配的内存不再是在java heap上,而是在C heap上
相关推荐
### 解决OutOfMemoryError内存溢出 在Java开发过程中,我们经常会遇到`java.lang.OutOfMemoryError`(简称OOM)的问题。这个问题的发生主要是由于JVM内存不足或程序中存在内存泄漏所引起的。本文将深入探讨OOM产生...
Java开发过程中,遇到`OutOfMemoryError`是一种常见的挑战,它表明程序在运行时耗尽了内存资源。MAT(Memory Analyzer Tool)是IBM提供的一款强大的Java内存分析工具,它专为解决此类问题而设计,帮助开发者深入理解...
在Java中,主要分为堆内存溢出(Heap Space OutOfMemoryError)和永久代/元空间溢出(PermGen/MethodArea OutOfMemoryError)。其中,堆内存用于存储对象实例,而永久代或元空间则主要用于存储类的元数据。 ### 2. ...
### 内存溢出解决 #### 背景与概念 在Java开发中,内存管理是确保应用程序稳定运行的关键因素之一。当程序运行时分配给它的内存空间不足以支撑其正常运行时,就会出现“内存溢出”(Out of Memory Error,简称OOM...
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
### Maven内存溢出解决方案 #### 一、引言 在使用Maven进行项目构建时,尤其是在处理大型项目或执行资源密集型任务(如`mvn site`)时,经常会遇到Java堆空间溢出的问题。这类问题通常是由于Maven运行所需的内存...
当程序创建新的对象并分配给堆时,如果堆空间不足,就会抛出`OutOfMemoryError: Java heap space`异常。Java应用程序可以通过设置JVM的启动参数来控制堆的大小,例如`-Xms`和`-Xmx`分别用于设置初始堆大小和最大堆...
JAVA内存溢出问题总结 JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题...
2. 程序不严密,产生太多的垃圾:程序中的死循环、无限循环、内存泄露等问题都会导致垃圾的积累,从而导致内存溢出。 解决方法 调整 JVM 的堆大小 1. 使用 `-Xmx` 参数增加堆的最大使用内存:可以在启动 JVM 时...
当应用程序创建大量对象,且这些对象生命周期较长,或者无法及时释放时,可能会导致堆内存溢出,表现为`java.lang.OutOfMemoryError: Java heap space`。为了解决这个问题,可以通过`-Xms`和`-Xmx`参数来设置堆的...
JVM 内存溢出类型有两种:java.lang.OutOfMemoryError: PermGen space 和 java.lang.OutOfMemoryError: Java heap space。PermGen space 是非堆内存,用于存放类的信息,GC 不会释放该空间。如果 web 应用使用了大量...
本篇文章将详细解析三种常见的Java内存溢出类型:JVM PermGen space溢出、JVM heap space溢出以及Native Heap溢出,并提供相应的解决方案。 1. **JVM PermGen space溢出** - ** PermGen space** 是JVM内存模型中的...
### 解决OutOfMemoryError: PermGen space 在Java应用程序运行过程中,可能会遇到“OutOfMemoryError: PermGen space”的错误提示。这种错误通常发生在永久代(PermGen space)内存不足的情况下,永久代主要用于...
java.lang.OutOfMemoryError是Java开发者在工作中经常会遇到的一个内存错误。该错误通常发生在JVM无法为新对象分配足够的堆内存时。由于内存问题导致的程序崩溃给开发和维护带来了极大的挑战,而解决这类问题需要对...
除了 PermGen space 溢出之外,另一个常见的问题是 Java heap space 溢出,即 `-java.lang.OutOfMemoryError: Java heap space`。这种情况发生在应用消耗的堆内存超过分配给 JVM 的最大堆内存限制时。 1. **原因...
在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)...
Java中的OutOfMemoryError(内存溢出)是一种常见的错误,本文将详细介绍OutOfMemoryError的三种情况及其解决方法。 首先,我们需要了解JVM(Java虚拟机)的内存管理机制。JVM管理的内存大致包括三种不同类型的内存...
这个错误可能是由于多种原因引起的,包括内存泄漏、堆内存分配不当、栈溢出或本地内存不足等。 首先,从描述中我们可以看到,系统使用的Java虚拟机(JVM)是`Java HotSpot(TM) Server VM`,版本为1.5.0_10-b03,...
Java内存溢出问题,全称为Java OutOfMemoryError,是Java开发者经常遇到的运行时异常。内存溢出通常发生在程序运行过程中,系统无法为运行的应用程序分配足够的内存资源,导致程序无法正常执行。理解并解决Java内存...