Java 程序在获取 OutOfMemoryError 时的行为是什么? .是否有任何定义的行为?进程会崩溃还是会进入等待/hibernate 状态?
更新:如果我没有在我的代码中处理它?</p>
最佳答案
并且 OutOfMemoryError
的处理方式与任何其他异常一样:
- 如果它被捕获,则不会再发生任何事情。
- 如果未被捕获,则 threads或 threads groups未捕获的异常处理程序处理它。这几乎总是导致线程停止。
但是有两个因素在其他异常中并不存在:
OutOfMemoryError
是一个Error
而不是Exception
.这意味着它极不可能在任何地方被捕获:你不应该 try catch 一个Error
一般(除了极少数异常(exception))并且通常不会这样做,所以有机会它被处理的数量相当少。- 当
OutOfMemoryError
发生并且没有对象因此符合 GC 条件时,您将仍然剩下很少的内存,并且您很可能会遇到稍后再次出现完全相同的问题。
如果发生这种情况的线程是唯一的非守护线程(通常,但不一定是执行 main
方法的主线程),那么该线程被杀死会导致整个 JVM 关闭(这通常被认为是“崩溃”)。
所以 tl;dr 是:它可能会杀死线程,如果内存问题没有解决,那么这可能会发生在越来越多的线程上.
关于java - 发生 OutOfMemoryError 时 Java 进程的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606953/