首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中的OutOfMemoryError行为

Java中的OutOfMemoryError行为
EN

Stack Overflow用户
提问于 2012-08-02 17:12:53
回答 5查看 169关注 0票数 0

我一直认为OutOfMemoryError会重新启动虚拟机。

但是我看到了一种行为,其中发生了OutOfMemoryError,这不是从代码中捕获的(实际上,我甚至不知道这是否可能)

然后继续执行JVM (不过会产生一个核心转储)。

有人能帮我理解这个行为吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-02 17:59:46

OutOfMemoryError向一个线程报告其内存分配失败。

代码语言:javascript
运行
复制
int count = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
    try {
        long[] longs = new long[Integer.MAX_VALUE];
    } catch (OutOfMemoryError e) {
        count++;
    }
}
long time = System.currentTimeMillis() - start;
System.out.printf("Got %,d OutOfMemoryErrors in %.1f seconds%n", count, time/1e3);

打印

代码语言:javascript
运行
复制
Got 10,000,000 OutOfMemoryErrors in 3.9 seconds
票数 2
EN

Stack Overflow用户

发布于 2012-08-02 17:17:45

OutOfMemoryError是一个例外,就像其他任何例外一样。它当然不会重启JVM。它可能会导致它所在的线程结束,但只有在它没有被捕获的情况下才会发生。您看到的可能不是核心转储,而仅仅是捕获的异常的堆栈跟踪,并使用e.printStackTrace()显式地打印它的堆栈跟踪。

票数 3
EN

Stack Overflow用户

发布于 2012-08-02 17:18:03

OutOfMemory只是一个错误,当一个对象由于缺乏可用内存而无法实例化时,就会抛出这个错误。这不会停止JVM,就像没有其他异常或错误一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11774399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档