我一直认为OutOfMemoryError
重新启动JVM。
但我看到其中一个OutOfMemoryError
发生这不是从代码抓到一个行为(其实我甚至不知道这是可能的)
和JVM
继续(核心转储虽然生产)。
任何人都可以帮助我理解这种行为吗?Java中的OutOfMemoryError行为
回答
OutOfMemoryError向一个线程报告其内存分配失败。
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);
打印
Got 10,000,000 OutOfMemoryErrors in 3.9 seconds
OutOfMemoryError
是一个例外,就像任何其他。它当然不会重新启动JVM。它可能会导致它发生的线程结束,但只有在任何地方都没有捕获到时才会发生。您可能看到的不是核心转储,而仅仅是捕获的异常的堆栈跟踪以及使用e.printStackTrace()
明确打印的堆栈跟踪。
OutOfMemory只是当由于缺少可用内存而无法实例化对象时引发的错误。这不会停止JVM,就像没有其他异常或错误一样。
否可丢弃重新启动JVM。 OutOfMemoryError与其他运行时异常或错误一样:它传播调用堆栈直到被捕获。如果不是,则线程的UncaughtExceptionHandler处理此异常,通常是终止线程并打印异常的堆栈跟踪。
OutOfMemoryError或任何异常都不会重新启动JVM。
I am seeing a behavior where an OutOfMemoryError occurs this is not caught from the code
---->OutOfMemoryError继承java.lang.Error
。错误描述了可能很少或难以从计算机内存耗尽中恢复的环境问题。您不需要处理Error类对象,但您应该使用Throwable
来处理它们。这些应该被视为 环境缺陷。
设计良好的应用程序非常需要处理任何Throwables,包括OOME's。你想看到你的服务器崩溃只是因为一个请求OOME'D或SOE'd?我也不会。 – 2012-08-02 10:23:46
我也不会更新答案。 :) – 2012-08-02 10:32:07
- 1. 发生OutOfMemoryError时的Java进程行为
- 2. java OutOfMemoryError
- 3. 哈德森java中的OutOfMemoryError
- 4. Java Android的Json OutOfMemoryError
- 5. 的OutOfMemoryError(JAVA):Java堆空间
- 6. Java OutOfMemoryError疑问
- 7. 单独的Java线程中的OutOfMemoryError
- 8. 使用Javolution Struct的Java OutOfMemoryError
- 9. 使用Picasso Image的Java OutOfMemoryError
- 10. apache Jena中使用TDB的Java OutOfMemoryError
- 11. BitmapFactory.decodeFile中的OutOfMemoryError()
- 12. cassandra中的OutOfMemoryError
- 13. Java storedProcedure停止与OutOfMemoryError
- 14. Android的OutOfMemoryError在SetContentView行
- 15. Galaxy S3中的OutOfMemoryError
- 16. SonarQube中的OutOfMemoryError 5.6.4
- 17. 如何克服java堆空间的OutOfMemoryError?
- 18. 基于Java的OutOfMemoryError与-Xms1000M -Xmx4000M -mx1000m
- 19. 异常:OutOfMemoryError:运行代码时的Java堆空间
- 20. OutOfMemoryError
- 21. OutOfMemoryError
- 22. Java Spring:在OutOfMemoryError后重新运行线程
- 23. Java - 解析ZipInputStream时出现OutOfMemoryError
- 24. 在OutOfMemoryError(Java)之前计算对象
- 25. Java keytool在-list期间抛出OutOfMemoryError
- 26. 阅读大文件错误“outofmemoryerror”(java)
- 27. Java JIT编译器导致OutOfMemoryError
- 28. 的OutOfMemoryError在Java中的一个plattform,但不是另一个
- 29. eclipse插件中的OutOfMemoryError
- 30. OutOfMemoryError与gradle中的ant.wsimport
所以,当我看到occusionally一个JVM重启,这是什么意思? – Jim 2012-08-02 09:23:25
这意味着一个JVM启动器实际上明确地负责重新启动。它与Java本身无关。 – 2012-08-02 09:27:02
所以你说,尽管转储表示堆已经被使用,但JVM仍然不会自行终止,在这种情况之后它能做什么? – Jim 2012-08-02 09:30:21