`
zoutm
  • 浏览: 96385 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

OutOfMemoryError并非虚拟机就挂掉了

阅读更多

我们公司几次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,也有可能恢复到正常状态,只是一般说来出现这样的问题比较难于恢复罢了。

 

分享到:
评论
1 楼 jiafu1115 2012-05-16  
这个例子很有趣,呵呵

相关推荐

    java虚拟机OutOfMemoryError:Java heap space堆dump文件

    java虚拟机OutOfMemoryError:Java heap space堆dump文件,可以直接用来分析。

    java.lang.OutOfMemoryError处理错误

    java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,发生这种错误时,JVM将无法继续运行,程序将崩溃。这种错误的出现通常是由于Jvm的内存不足或内存泄露导致的。 出现java.lang.OutOfMemoryError的...

    javase8虚拟机结构

    如果Java虚拟机栈无法通过动态扩展或重新分配等方式获取更多的空间时,则会抛出`OutOfMemoryError`异常。 #### 3. Java堆 Java堆(Heap)是所有线程共享的一块内存区域,在Java虚拟机启动时创建,主要用于存储所有类...

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

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

    java虚拟机介绍

    - **异常处理**:与虚拟机栈类似,可能出现`StackOverflowError`和`OutOfMemoryError`。 4. **Java堆(Java Heap)**: - **线程共享**:所有线程共享同一块内存区域。 - **功能**:用于存放所有Java对象实例以及...

    junrar的OutOfMemoryError错误解决源码

    如果堆内存不足,JVM就会抛出`OutOfMemoryError`。在junrar的案例中,由于没有有效地管理内存,当解压大文件时,可能会超出堆内存的限制。 解决这个问题的关键在于优化junrar的内存使用策略。一种可能的方法是采用...

    Java 虚拟机.pdf

    Java 虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行Java程序,并提供了运行时环境。本文将详细解析JVM的运行时数据区域、垃圾收集机制以及相关优化参数。 一、运行时数据区域 1. 程序计数器:这是一个较...

    JVM虚拟机面试题汇总

    每调用一次方法,JVM栈就会增加一个栈帧,每退出一个方法,JVM栈就会弹出一个栈帧。栈帧结构如下: - **局部变量表(Local Variable Table)**:用于存放编译期可知的各种基本数据类型、对象引用等。 - **操作数栈...

    Java虚拟机内存区域模型

    程序计数器是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 虚拟机栈是Java虚拟机内存区域的另一个重要组成部分,它是线程私有的,用于存储局部变量表、操作数栈、动态链接、方法出口等信息...

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

    其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)的堆内存空间已耗尽。 #### 标题和描述中的知识点详解 **标题:“java错误处理:java.lang.OutOfMemoryError:...

    遭遇OutOfMemoryError

    首先,从描述中我们可以看到,系统使用的Java虚拟机(JVM)是`Java HotSpot(TM) Server VM`,版本为1.5.0_10-b03,设置了较大的堆内存`-Xms2048m -Xmx2048m`,以及新生代大小`-XX:NewSize=768m`,永久代大小`-XX:...

    Java虚拟机讲解笔记.docx

    - **特点**: 是一块较小的内存空间,不会出现OutOfMemoryError。 ##### 5. 本地方法栈 (Native Method Stack) - **功能**: 为虚拟机使用到的Native方法服务。 - **实现**: 有些虚拟机(如HotSpot)直接把本地方法...

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

    这种异常通常发生在应用程序占用的堆内存超过了Java虚拟机(JVM)分配给它的最大堆内存限制时。本文将详细介绍该问题产生的原因以及如何有效地解决它。 #### 一、问题分析 1. **异常含义**: - `java.lang....

    java.lang.OutOfMemoryError解决办法

    PermGen(Permanent Generation)是Java虚拟机(JVM)的一个内存区域,主要用于存储类的元数据,如类的名称、方法信息等。与堆区不同,堆区中的对象在不再被引用时会被垃圾收集器(Garbage Collector, GC)回收,但...

    解决OutOfMemoryError: PermGen space

    解决“OutOfMemoryError: PermGen space”问题虽然过程可能比较痛苦,但是一旦找到正确的方法,问题就能得到解决。本文提供的解决方案包括调整PermGen space的大小、优化代码、使用JConsole监控内存等,希望能帮助...

    JVM中[虚拟机栈]的所有内容-pdf

    Java虚拟机栈(JVM Stack)是Java虚拟机内存模型中的一个重要组成部分,它与程序的执行密切相关。每个线程在启动时都会创建一个独立的虚拟机栈,用于存储每个线程在执行过程中产生的栈帧(Stack Frame)。栈帧是...

    java.lang.OutOfMemoryError: PermGen space解决方案

    java.lang.OutOfMemoryError: PermGen space 解决方案

    java虚拟机参数配置

    在Java开发过程中,Java虚拟机(JVM)的性能调优是提高应用程序运行效率的关键环节之一。通过合理的JVM参数配置,可以有效地管理内存分配、垃圾回收等关键资源,从而提升程序的稳定性和响应速度。本文将围绕"java...

Global site tag (gtag.js) - Google Analytics