Java 发生 OOM 后还能运行么?

在查询网上资料后,个人认为取决于两点,一是发生oom的代码是否有被try catch,二是发生oom的对象是否引用可达。如果oom的代码没有被try catch,则当前线程不会退出,oom对象相应也会保持引用可达状态,此时对象不会被full gc回收,导致整个程序瘫痪。若oom的代码被try catch了,但是其对象被其他线程共同引用,比如说该对象是一个静态变量且存在引用,这时候full gc也回收不掉该对象,整个程序也会瘫痪。但是如果同时满足try catch以及oom对象引用不可达,那么在线程正常结束后,对象就会被正常回收,不会影响到其他线程乃至整个jvm。

你可能感兴趣的:(java)