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

时间:2015-04-10 04:42:19

标签: java out-of-memory

我刚刚读到有关OutOfMemory错误的信息。我理解如下声明:

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

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

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

2 个答案:

答案 0 :(得分:1)

可能有多种原因导致内存不足错误。邪恶的黑客学会做这样的事情来获得破解和允许访问的代码。安全人员会在测试用例中执行此操作以强化正在测试的代码并修复漏洞。

操作系统开发人员可以进行此类测试,以提高系统的稳定性并从糟糕的软件中恢复。蓝屏任何人死亡?

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

答案 1 :(得分:1)

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

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

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

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];
  }
}