Java进程OutOfMemoryError与catch Throwable

如果java进程发生OOM, 代码是否可以catch住这个异常?

答案是可以的. 测试代码如下:

public class TestOOM{


	public static void main(String[] args) throws Exception{
		int ten_mb = 1024 * 1024 * 10;
		int count = 10;
		new Thread(){
			public void run(){
				int count = 10;
				while(count -- > 0){
					System.out.println("i'm running");
					try{
						Thread.sleep(100);
					}catch(Throwable e){

					}
				}
			}
		}.start();
		while(count -- > 0){
			try{
				byte[] content = new byte[ten_mb];
			}catch(Throwable e){
				e.printStackTrace();
			}finally{
				System.out.println("count down: " + count);
				Thread.sleep(1000);
			}
		}
	}
}

使用
java -Xms8m TestOOM

运行程序结果如下:
HaitaoYao-MacPro:tmp haitao$ java -Xmx10m TestOOM
i'm runningjava.lang.OutOfMemoryError: Java heap space

        at TestOOM.main(TestOOM.java:24)
count down: 9
i'm running
java.lang.OutOfMemoryError: Java heap space
        at TestOOM.main(TestOOM.java:24)
count down: 8
i'm running
java.lang.OutOfMemoryError: Java heap space
        at TestOOM.main(TestOOM.java:24)
count down: 7
i'm running
java.lang.OutOfMemoryError: Java heap space
        at TestOOM.main(TestOOM.java:24)
count down: 6
i'm running
java.lang.OutOfMemoryError: Java heap space
count down: 5
i'm running
java.lang.OutOfMemoryError: Java heap space
count down: 4
i'm running
java.lang.OutOfMemoryError: Java heap space
count down: 3
i'm running
java.lang.OutOfMemoryError: Java heap space
count down: 2
i'm running
i'm running
java.lang.OutOfMemoryError: Java heap space
count down: 1
java.lang.OutOfMemoryError: Java heap space
count down: 0

可以得出的结论是:
  • OutOfMemoryError 可以被catch住, 使用catch Error或者直接catch Throwable
  • 其他的线程,如果不在极限情况下分配内存, 仍然可以继续运行.
  • catch Throwable 的使用要小心



--EOF--


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值