Saya telah memprogram di Jawa selama sekitar 8 tahun dan saya tahu bahasanya dengan baik sebagai pengembang, tetapi tujuan saya adalah untuk memperdalam pengetahuan saya tentang internal. Saya telah mengambil kursus sarjana dalam desain PL, tetapi mereka adalah ikhtisar akademik yang sangat luas (dalam Skema, IIRC).
Dapatkah seseorang menyarankan rute untuk mulai menggali detail? Secara khusus, apakah ada topik tertentu (misalnya, pengumpulan sampah) yang mungkin lebih mudah didekati atau menjadi titik awal yang baik? Apakah ada buku tingkat tinggi yang layak tentang internal JVM dan desain bahasa pemrograman Java? Pendekatan saya saat ini adalah memulai dengan spesifikasi JVM dan penelitian sesuai kebutuhan.
SUPER
flag pada file kelas? Sebagian besar dijelaskan dalam JVM spec itu sendiri, tetapi membutuhkan beberapa usaha untuk mengeluarkannya dari sana dan ke dalam otak Anda ;-)Jawaban:
Saya melakukan sedikit ini ketika saya mulai dengan Java, bertahun-tahun yang lalu. Pendekatan saya adalah membaca spesifikasi VM , dan untuk melihat output dari javap -c, yang menampilkan bytecode yang dibongkar dari sebuah kelas. Saya juga mencoba membuat kelas-kelas java dengan bytecode tertentu, menggunakan assembler java bytecode. Ada assembler bernama jasmin , jika Anda ingin mencobanya.
Anda mungkin juga ingin melihat dokumen Terjemahan Ekspresi Lambda yang diposting oleh Brian Goetz dari Oracle, yang mencakup strategi yang akan digunakan untuk menerjemahkan lambda (penutupan, pada dasarnya) yang ditambahkan di Java 8.
Anda juga bisa mendapatkan kode sumber untuk Hotspot VM dari OpenJDK , dan versi akses awal kompiler javac dengan dukungan lambda (repositori hg) untuk JDK 8, jika Anda benar-benar ingin menyelam ke ujung kolam.
Melihat ke pengumpulan sampah mungkin merupakan ide yang bagus. Pencarian cepat menemukan artikel Dr. Dobbs tentang GC pertama di Jawa ini. Saya tidak tahu apakah itu perkenalan yang bagus. Saya berasumsi Anda sudah tahu tentang mark-and-sweep dan pengumpul sampah generasi; jika tidak, Anda harus membaca yang pertama.
sumber
Beberapa ide tambahan:
sumber
Jika Anda belum terbiasa dengan format bytecode Java, maka pertimbangkan untuk menulis compiler kecil yang membuat kode byte Java yang valid (atau assembler Jasmin) dan membuatnya berjalan dengan benar.
Melihat "Hello World" atau "4" (diberikan 2 + 2) yang dihasilkan oleh kode Anda sangat memuaskan.
sumber
Selain apa yang orang lain katakan, lihat halaman Java Performance Tuning . Ini berisi banyak artikel tentang pengumpulan sampah dan penyempurnaan kinerja secara umum. Ini juga berisi daftar buku tuning kinerja yang mungkin menarik untuk Anda juga.
sumber