ここでは、エラーから回復することは不可能であると述べています。例外と同じようにエラーをキャッチできるため、それが何を意味するのかわかりません。例えば:
public static void main(String args[]) {
while (true) {
try {
throw new StackOverflowError("stackoverflow");
} catch (Throwable throwable) {
//do something
}
//program recover and continue to execute
}
}
上記のプログラムは正常に実行され、エラーから回復できたようです。誰でも助けることができますか?
アップデート:
スタックオーバーフローの例は少し不可解です。スタックオーバーフローから回復したいのはばかだけです。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 から回復できないと言ったのか。