java java.lang.outofmemoryerror,捕获java.lang.OutOfMemoryError?

你,你们能,会,可以从它中恢复过来:package com.stackoverflow.q2679330;public class Test {

public static void main(String... args) {

int size = Integer.MAX_VALUE;

int factor = 10;

while (true) {

try {

System.out.println("Trying to allocate " + size + " bytes");

byte[] bytes = new byte[size];

System.out.println("Succeed!");

break;

} catch (OutOfMemoryError e) {

System.out.println("OOME .. Trying again with 10x less");

size /= factor;

}

}

}}

但这有意义吗?你还想做什么?你最初为什么要分配那么多内存?内存少也可以吗?你为什么不好好利用它呢?或者如果这是不可能的,为什么不从一开始就给JVM更多的内存呢?

回到你的问题:1:捕捉java.lang.OutOfMemoryError可能是个好主意。

没人会想到。2:如果我们捕获java.lang.OutOfMemoryError,如何确保CATCH处理程序本身不分配任何内存(任何工具或最佳实践)?

这取决于是什么导致了OOME。如果它被声明在try一步的发生,那么你的机会就很小了。你,你们可以,可能想事先预留一些内存空间:private static byte[] reserve = new byte[1024 * 1024]; // Reserves 1MB.

然后在OOME期间将其设置为零:} catch (OutOfMemoryException e) {

reserve = new byte[0];

// Ha! 1MB free!}

当然,这完全没有意义;)只要根据应用程序的需要给JVM足够的内存即可。必要时运行分析器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值