Если спецификация языка Java не определяет в явном виде, какое значение выхода следует ожидать, то оно не определено, и вы не должны полагаться на него.
Вы должны поймать Throwable в своем главном методе и самостоятельно вызвать System.exit(1).
Прикрепляю к посту несколько видео по теме: