Em Java, o bloco "finalmente" é garantido para ser chamado (no método principal)?

Sou iniciante em Java e estava pensando, se tenho o seguinte código Java típico

public class MyApp {
  public static void main(String[] args) {
    try {
      // do stuff
    } catch {
      // handle errors
    } finally {
      // clean up connections etc.
    }
  }
}

a JVM garante que o bloco final sempre seja executado? Para entender de onde eu venho, estou acostumado a programas C / C ++ que podem falhar se você derreferenciar um ponteiro NULL e não puder ter nenhum código para ser executado depois disso.

Mas como eu entendo Java e todo o negócio de memória gerenciada / GC em geral, não existe desreferenciamento de ponteiro nulo, tudo é uma expectativa capturável, portanto não há realmente uma maneira de travar meu programa que poderia fazê-lo pular o arquivo finalmente. , ou existe? Por exemplo, em Python, eu costumo

try:
  # do stuff
except AnExceptionIKnewMightHappen:
  # react in an appropriate way
except:
  # log that weird error I had not known could happen

e eu nunca tive nenhum aplicativo morrer sem passar pelo meu código.

Obviamente, se o sistema operacional, por algum motivo, matar o processo (ou se algo matar o sistema inteiro, como desligar), não há muito o que Java possa fazer. Além disso, no PHP, conheço erros não capturáveis contra os quais você não pode se proteger, mesmo que o intérprete ainda estivesse lá após o ocorrido (pelo menos, é capaz de emitir uma mensagem adequada).

Editar: Apenas para maior clareza (não foi realmente mal interpretado por ninguém), deixe-me acrescentar que estava procurando coisasdentro do meu código isso poderia levar ao finalmente ser ignorado. Portanto, apontar para System.exit foi um lembrete útil, mesmo que eu não perceba por que gostaria de fazer algo assim.

A saída da JVM é uma maneira bastante óbvia e eu contaria isso como uma causa externa. A observação indicando que você também precisa se lembrar da possibilidade de os threads saírem enquanto a JVM e o aplicativo continuam sendo executados foi muito útil, porque mesmo que pareça óbvio para mim agora, eu não tinha pensado nisso.

questionAnswers(10)

yourAnswerToTheQuestion