Я написал следующую простую программу:
public class Main{
public static void main(String[] args) throws Exception{
new Thread(() -> {
try{
Thread.sleep(10000);
} catch(Exception ignored){ }
throw new OutOfMemoryError("BOOM!");
}).start();
while(true){
System.out.println("Doing some job...");
try{
Thread.sleep(1000);
} catch(Exception ignored){ }
}
}
}
Теперь я запускаю это с параметрами java -XX:OnOutOfMemoryError="kill -9 %p" Main
и ожидаю, что программа получит SIGKILL
сгенерированную ошибку.Но в итоге он печатает Doing some job...
даже после того, как OutOfMemoryError
было брошено:
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Exception in thread "Thread-0" java.lang.OutOfMemoryError: BOOM!
at Main.lambda$main$0(Main.java:11)
at java.lang.Thread.run(Thread.java:748)
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Doing some job...
Что с этим не так?
Я нахожусь на java 1.8.0_66
Я пытался сделать java -XX:OnOutOfMemoryError='kill -9 %p' Main
и java "-XX:OnOutOfMemoryError=kill -9 %p" Main
, но он все еще продолжает работать ...
Я также пытался проверить этои выполните sudo java -XX:OnOutOfMemoryError="echo 233 > /root/oom" Main
и ожидаемое /root/oom
будет содержать 223
, но файл не был создан.Что я сделал не так?