Java 中强制 OutOfMemory 错误的可能原因

Possible reasons for forcing OutOfMemory error in Java

我刚读到有关 OutOfMemory 错误的信息。我理解这样的陈述:

int[] i = new int[Integer.MAX_VALUE];

会抛出 OutOfMemory 错误。我的问题是,是否存在程序员实际上想要强制执行此类错误(例如测试)的情况?如果有,会是什么?

如果有人回答我的问题,我会很高兴吗?提前致谢!

强制出现内存不足错误的原因有很多。邪恶的黑客学会做这样的事情来破解代码并允许访问。安全人员会在测试用例中这样做,以强化被测试的代码并修复漏洞。

OS 开发人员可以进行此类测试以提高系统的稳定性并从不良软件中恢复。有人蓝屏死机吗?

如果在某些情况下内存是一个问题,例如嵌入式代码或卫星中的微型计算机等,这种类型的测试将为您提供代码和数据大小的开发参数。

您可能希望明确抛出此类异常的原因包括

  • 测试
  • 当你知道某件事不会成功时就提前退出。
  • 提供更有用的错误信息

在这些情况下,您可能会:

List<Foo> getManyFoos(int nToGet) {
  if(nToGet * sizeOfAFoo > availableSpareMemory)
    throw new OutOfMemoryError("Too many foos requested")
  ...
}

您可能想要捕获它的情况是您正在分配缓存的地方(大小无关紧要)

List<Foo> createCache() {
  try {
    List<Foo> bigCache = getManyFoos(1000);
    return bigCache;
  } catch (OutOfMemoryError e) {
    return getManyFoos(10);
  }
}

或者您可能希望请求在 GC 后成功。

Foo[] getFoosArray(int lotsOfFoos) {
  try {
    return new Foo[lotsOfFoos];
  } catch( OutOfMemoryError e ) {
    System.gc();
    return new Foo[lotsOfFoos];
  }
}