我们公司几次JVM培训都讲到了OutOfMemory问题,大家都在争论OutOfMemoryError是否一定导致JVM crash。让我们用一个非常简单的例子来说明这个问题:package com.webex.joe;
public class OutOfMemoryTest {
public static void main(String[] args) {
int size = 10000;
while (true) {
try {
byte[] obj = new byte[size];
System.out.println("申请内存正常,size=" + size);
size *= 10;
} catch (Throwable e) {
if (e instanceof OutOfMemoryError) {
size /= 10;
}
e.printStackTrace();
}
}
}
}
打印的结果将如下:
java.lang.OutOfMemoryError: Java heap space
申请内存正常,size=10000000
java.lang.OutOfMemoryError: Java heap space
申请内存正常,size=10000000
java.lang.OutOfMemoryError: Java heap space
申请内存正常,size=10000000
java.lang.OutOfMemoryError: Java heap space
很明显,即使出现OutOfMemoryError,也有可能恢复到正常状态,只是一般说来出现这样的问题比较难于恢复罢了。
分享到:
相关推荐
java虚拟机OutOfMemoryError:Java heap space堆dump文件,可以直接用来分析。
java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,发生这种错误时,JVM将无法继续运行,程序将崩溃。这种错误的出现通常是由于Jvm的内存不足或内存泄露导致的。 出现java.lang.OutOfMemoryError的...
如果Java虚拟机栈无法通过动态扩展或重新分配等方式获取更多的空间时,则会抛出`OutOfMemoryError`异常。 #### 3. Java堆 Java堆(Heap)是所有线程共享的一块内存区域,在Java虚拟机启动时创建,主要用于存储所有类...
Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题的一些方法: 原因分析 1. Java 虚拟机 (JVM) 内存过小:...
- **异常处理**:与虚拟机栈类似,可能出现`StackOverflowError`和`OutOfMemoryError`。 4. **Java堆(Java Heap)**: - **线程共享**:所有线程共享同一块内存区域。 - **功能**:用于存放所有Java对象实例以及...
如果堆内存不足,JVM就会抛出`OutOfMemoryError`。在junrar的案例中,由于没有有效地管理内存,当解压大文件时,可能会超出堆内存的限制。 解决这个问题的关键在于优化junrar的内存使用策略。一种可能的方法是采用...
Java 虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行Java程序,并提供了运行时环境。本文将详细解析JVM的运行时数据区域、垃圾收集机制以及相关优化参数。 一、运行时数据区域 1. 程序计数器:这是一个较...
每调用一次方法,JVM栈就会增加一个栈帧,每退出一个方法,JVM栈就会弹出一个栈帧。栈帧结构如下: - **局部变量表(Local Variable Table)**:用于存放编译期可知的各种基本数据类型、对象引用等。 - **操作数栈...
程序计数器是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 虚拟机栈是Java虚拟机内存区域的另一个重要组成部分,它是线程私有的,用于存储局部变量表、操作数栈、动态链接、方法出口等信息...
其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)的堆内存空间已耗尽。 #### 标题和描述中的知识点详解 **标题:“java错误处理:java.lang.OutOfMemoryError:...
首先,从描述中我们可以看到,系统使用的Java虚拟机(JVM)是`Java HotSpot(TM) Server VM`,版本为1.5.0_10-b03,设置了较大的堆内存`-Xms2048m -Xmx2048m`,以及新生代大小`-XX:NewSize=768m`,永久代大小`-XX:...
- **特点**: 是一块较小的内存空间,不会出现OutOfMemoryError。 ##### 5. 本地方法栈 (Native Method Stack) - **功能**: 为虚拟机使用到的Native方法服务。 - **实现**: 有些虚拟机(如HotSpot)直接把本地方法...
这种异常通常发生在应用程序占用的堆内存超过了Java虚拟机(JVM)分配给它的最大堆内存限制时。本文将详细介绍该问题产生的原因以及如何有效地解决它。 #### 一、问题分析 1. **异常含义**: - `java.lang....
PermGen(Permanent Generation)是Java虚拟机(JVM)的一个内存区域,主要用于存储类的元数据,如类的名称、方法信息等。与堆区不同,堆区中的对象在不再被引用时会被垃圾收集器(Garbage Collector, GC)回收,但...
解决“OutOfMemoryError: PermGen space”问题虽然过程可能比较痛苦,但是一旦找到正确的方法,问题就能得到解决。本文提供的解决方案包括调整PermGen space的大小、优化代码、使用JConsole监控内存等,希望能帮助...
Java虚拟机栈(JVM Stack)是Java虚拟机内存模型中的一个重要组成部分,它与程序的执行密切相关。每个线程在启动时都会创建一个独立的虚拟机栈,用于存储每个线程在执行过程中产生的栈帧(Stack Frame)。栈帧是...
java.lang.OutOfMemoryError: PermGen space 解决方案
在Java开发过程中,Java虚拟机(JVM)的性能调优是提高应用程序运行效率的关键环节之一。通过合理的JVM参数配置,可以有效地管理内存分配、垃圾回收等关键资源,从而提升程序的稳定性和响应速度。本文将围绕"java...