【问题标题】:Why is it possible to log OutOfMemory error in Java? [duplicate]为什么可以在 Java 中记录 OutOfMemory 错误? [复制]
【发布时间】:2017-10-10 11:11:47
【问题描述】:

为了在 catch 块中记录任何内容,我们需要文本,它是一个 String 对象,但 JVM 已经耗尽了内存。我能想到的两个可能的原因是:

  1. OutOfMemory 错误表示堆空间和字符串对象可以保存在字符串池中。
  2. OutOfMemory 错误表示剩余空间非常小,而堆已完全填满,并且可用于存储要记录的字符串的空间非常小。

【问题讨论】:

  • 表面上那些奇怪的问题之一;但提供有趣的思考...
  • 与您的问题并不完全相同,但许多答案提供了您正在寻找的那种洞察力。
  • @Michael 好点!

标签: java exception heap-memory


【解决方案1】:

非常广泛的问题,但只有一个简单的答案:在实现 JVM 时,您可能不想等到 100% 的内存用完。

意思:当你达到你的极限的 99.99% 时,你可能会简单地拉“紧急休息”。因为那时你知道你有足够的“小”储备来允许(以某种方式)协调的“紧急关闭”。

除此之外:这可能会“少”一些关于异常的消息字符串......请记住,JVM 也会收集堆栈跟踪信息;并将其附加到异常/错误。 (恕我直言)这更多昂贵然后为一些消息字符串腾出空间!

【讨论】:

  • 是的,我在第二个原因中也有同样的想法。我想知道我们是否将它写在某个地方,以便我们可以确定这是真正的原因。
  • 我认为作为密切原因提到的问题可能有一些见解。无论如何:这将是真的实现特定的;因为有很多不同的方法来处理它。
  • @GhostCat 我认为你是对的,这取决于实施。您可能很幸运并且能够毫无问题地记录 OOME,或者您可能不会。有一个 JVM 选项OnOutOfMemoryError,它允许您指定在 OOME 情况下要运行的可执行文件。它的存在向我表明,处理这个问题的最可靠方法是遵从其他程序。
猜你喜欢
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2017-05-10
  • 2016-11-14
  • 1970-01-01
  • 2015-10-20
相关资源
最近更新 更多