Saya datang ke sini karena saya juga mengalami pertanyaan ini di The Passionate Programmer , oleh Chad Fowler. Bagi mereka yang tidak memiliki akses ke salinan, pertanyaan dibingkai sebagai semacam filter / tes untuk kandidat yang mewawancarai posisi yang membutuhkan "programmer Java yang benar-benar baik."
Secara khusus, ia bertanya:
Bagaimana Anda menulis sebuah program, di Java murni, yang akan menyebabkan Java Virtual Machine crash?
Saya telah memprogram di Jawa selama lebih dari 15 tahun, dan saya menemukan pertanyaan ini membingungkan dan tidak adil. Seperti yang ditunjukkan orang lain, Java, sebagai bahasa yang dikelola, dirancang khusus untuk tidak crash . Tentu saja selalu ada bug JVM, tetapi:
- Setelah 15+ tahun JRE tingkat produksi, jarang terjadi.
- Setiap bug seperti itu kemungkinan akan ditambal pada rilis berikutnya, jadi seberapa besar kemungkinan Anda sebagai seorang programmer untuk bertemu dan mengingat kembali rincian set-stop JRE saat ini?
Seperti yang lain telah disebutkan, beberapa kode asli melalui JNI adalah cara yang pasti untuk menabrak JRE. Tetapi penulis secara khusus disebutkan dalam Java murni , jadi itu keluar.
Pilihan lain adalah memberi makan kode byte palsu JRE; cukup mudah untuk membuang beberapa data biner sampah ke file .class, dan meminta JRE untuk menjalankannya:
$ echo 'crap crap crap' > crap.class
$ java crap
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1668440432 in class file crap
Apakah itu penting? Maksudku JRE itu sendiri belum jatuh; itu benar mendeteksi kode palsu, melaporkannya, dan keluar.
Ini memberi kita berbagai solusi yang paling jelas seperti meniup tumpukan melalui rekursi, kehabisan memori tumpukan melalui alokasi objek, atau hanya melempar RuntimeException
. Tapi ini hanya menyebabkan JRE keluar dengan StackOverflowError
pengecualian atau serupa, yang, sekali lagi bukan benar-benar crash .
Jadi, apa yang tersisa? Saya benar-benar ingin mendengar apa yang sebenarnya ada dalam pikiran penulis sebagai solusi yang tepat.
Pembaruan : Chad Fowler merespons di sini .
PS: buku yang bagus. Saya mengambilnya untuk dukungan moral sambil belajar Ruby.