java - 发生 OutOfMemoryError 时 Java 进程的行为

标签 java jvm out-of-memory

Java 程序在获取 OutOfMemoryError 时的行为是什么? .是否有任何定义的行为?进程会崩溃还是会进入等待/hibernate 状态?

更新:如果我没有在我的代码中处理它?<​​/p>

最佳答案

并且 OutOfMemoryError 的处理方式与任何其他异常一样:

  • 如果它被捕获,则不会再发生任何事情。
  • 如果未被捕获,则 threadsthreads groups未捕获的异常处理程序处理它。这几乎总是导致线程停止。

但是有两个因素在其他异常中并不存在:

  • OutOfMemoryError 是一个 Error而不是 Exception .这意味着它极不可能在任何地方被捕获:你不应该 try catch 一个Error一般(除了极少数异常(exception))并且通常不会这样做,所以有机会它被处理的数量相当少。
  • OutOfMemoryError 发生并且没有对象因此符合 GC 条件时,您将仍然剩下很少的内存,并且您很可能会遇到稍后再次出现完全相同的问题。

如果发生这种情况的线程是唯一的非守护线程(通常,但不一定是执行 main 方法的主线程),那么该线程被杀死会导致整个 JVM 关闭(这通常被认为是“崩溃”)。

所以 tl;dr 是:它可能会杀死线程,如果内存问题没有解决,那么这可能会发生在越来越多的线程上.

关于java - 发生 OutOfMemoryError 时 Java 进程的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606953/

相关文章:

c# - 编辑 HTML 文件以 jQuery 样式操作 DOM

Java虚拟机新手困惑: When is the virtual machine invoked while compiling java

刷新数据时Android OutOfMemoryError

java - 如何为 win32 配置 rcp 产品以在控制台上正确打印德语变音符号?

java - 循环屏障异常处理

java - 约束布局 : How to add several views programmatically?

java - 类冲突 : two jar files with the same classes

java - 为什么Java虚拟机中没有GIL?为什么 Python 这么需要一个?

memory - 在 TensorFlow 中的 GPU 之间平均分配 RNN 内存消耗

java - Android幻灯片放映导致内存泄漏