Sono venuto qui perché ho anche incontrato questa domanda in The Passionate Programmer , di Chad Fowler. Per coloro che non hanno accesso a una copia, la domanda è inquadrata come una specie di filtro / test per i candidati che intervistano per una posizione che richiede "programmatori Java davvero bravi".
In particolare, chiede:
Come scriveresti un programma, in puro Java, che causerebbe l'arresto anomalo della Java Virtual Machine?
Ho programmato in Java per oltre 15 anni e ho trovato questa domanda perplessa e ingiusta. Come altri hanno sottolineato, Java, come linguaggio gestito, è specificamente progettato per non arrestarsi in modo anomalo . Ovviamente ci sono sempre bug di JVM, ma:
- Dopo oltre 15 anni di JRE a livello di produzione, è raro.
- È probabile che eventuali bug di questo tipo vengano corretti nella prossima versione, quindi con quale probabilità sei un programmatore per imbatterti e ricordare i dettagli dell'attuale serie di show-stopper di JRE?
Come altri hanno già detto, alcuni codici nativi tramite JNI sono un modo sicuro per arrestare un JRE. Ma l'autore ha menzionato nello specifico Java puro , quindi è tutto fuori.
Un'altra opzione sarebbe quella di alimentare i codici byte fasulli JRE; è abbastanza facile scaricare alcuni dati binari dell'immondizia in un file .class e chiedere a JRE di eseguirlo:
$ echo 'crap crap crap' > crap.class
$ java crap
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1668440432 in class file crap
Questo conta? Voglio dire, il JRE stesso non si è schiantato; ha correttamente rilevato il codice falso, lo ha segnalato ed è uscito.
Questo ci lascia con i tipi più ovvi di soluzioni come far esplodere lo stack tramite ricorsione, esaurire la memoria dell'heap tramite allocazioni di oggetti o semplicemente lanciare RuntimeException
. Ma questo fa sì che JRE esca con StackOverflowError
un'eccezione simile o simile, che, di nuovo, non è davvero un crash .
Quindi cosa rimane? Mi piacerebbe davvero sapere cosa aveva in mente l'autore come una soluzione adeguata.
Aggiornamento : Chad Fowler ha risposto qui .
PS: è un libro altrimenti fantastico. L'ho raccolto per supporto morale mentre imparavo Ruby.