这里说不可能从错误中恢复。我不确定这是什么意思,因为我可以像异常一样捕获错误。例如:
public static void main(String args[]) {
while (true) {
try {
throw new StackOverflowError("stackoverflow");
} catch (Throwable throwable) {
//do something
}
//program recover and continue to execute
}
}
上述程序正常执行,似乎可以从错误中恢复。任何人都可以帮忙吗?
更新:
stackoverflow的例子有点令人费解,只有白痴想从stackoverflow中恢复。这是关于 OutOfMemory 的另一个示例:
public class Main {
public static Map<Long, Object> cache = null;
public static void main(String args[]){
while(true){
try {
if(cache == null) {
cache = new HashMap<>();
}
for (long i = 0; i < Long.MAX_VALUE; ++i) {
cache.put(i, i);
}
}catch(OutOfMemoryError error) {
cache.clear();//delete some unused entry or clear all.
cache = null;
System.gc();
System.out.println("release memory");
}
}
}
}
这是一个简单的HashMap缓存,使用 执行代码java -Xmx1m Main
,很快就会看到OutOfMemoryError,然后手动释放内存,程序会继续执行。插入-> OutOfMemoryError -> 释放-> 插入...看到了吗?程序已从 OutOfMemoryError 中恢复。不是吗?而且我认为这很有意义。那么,为什么有人仍然说程序无法从 OutOfMemoryError 中恢复。