Я использую JDK 1.8.0_u66
, для которого опция -XX:+CrashOnOutOfMemoryError
пока недоступна.Итак, я остановился на настройке -XX:OnOutOfMemoryError="kill -9 %p"
Хорошо, я написал следующее простое приложение:
public static void main(String[] args) throws Exception{
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
while (true) {
new Thread(() -> {
lock.lock();
try {
while (true) {
try{
condition.await();
} catch (Exception e){}
}
} finally {
lock.unlock();
}
}).start();
}
}
Приложение завершается с ошибкой
Exception in thread "main" java.lang.OutOfMemoryError:
unable to create new native thread
в разделенииво-вторых, но это не убивает, как я ожидал, так как я установил опцию -XX:OnOutOfMemoryError="kill -9 %p"
.
Я предполагаю, что уничтожение JVM выполняется в отдельном Thread
, но создать его невозможно, так как предел уже достигнут.Таким образом, приложение молча продолжает работать в несовместимом состоянии.