Java try catch - 内存不足

标签 java

这个问题在这里已经有了答案:





Catching java.lang.OutOfMemoryError?

(14 个回答)


7年前关闭。




try catch 在捕获内存不足异常方面有多好?我没有任何编写在低级别管理自己内存的软件的经验,但我可以想象一种方法来做到这一点。

我不知道 Java 实际处理内存异常的方式。管理内存的程序是否可能内存不足?我什么时候可以 try catch 内存不足异常而它无法捕获异常?

谢谢!

最佳答案

您不必担心作为捕获 throwable 的一部分而发生的任何隐式分配本身。总是有可能捕获它们。 JVM 甚至会在出现问题时保留 OOM 错误的预分配实例,以便它们自己永远不会分配失败。

但是,很可能还有次要的问题:

  • 任何分配都可能是压垮 Camel 的最后一根稻草,因此您可能不知道您的代码将在哪里抛出 OOM 错误。它甚至可能发生在与您正在执行内存消耗工作的线程完全不同的线程中,从而使 JVM 的完全不同的部分崩溃。
  • 根据捕获它时要执行的操作,您可能会分配更多内存(例如 LogRecordStringBuilder ,后者甚至可能作为语法字符串连接的一部分隐式发生),其中可能会再次耗尽内存。

  • 但是,这些问题仅在您以“正常方式”耗尽内存时才适用;也就是说,通过分配大量“正常”对象。相比之下,如果内存不足的操作是,例如,单个分配,比如 10 GB 阵列,那么它们不会造成问题。

    关于Java try catch - 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21643225/

    相关文章:

    java - 日历构造函数 Java toString

    java - 调用方法接收器?

    Java:监听具有更多线程的单个端口与监听多个端口

    java - 制作一个简单的蜂窝发射器

    java - 多个包裹对象中的反射

    java - 在不同包的子类中使用 super() 作为 equals()

    java - 映射对象流 hibernate Java EE

    java - 显示标签 pdf 导出未下载

    java - preparedStatement.addBatch() 添加空参数

    java - Pulpcore 和 Javascript 到 Java Applet 的通信