Bagaimana mesin maya Java menangani kaedah pemanggilan dan pengembalian

Under The Hood bulan ini memfokuskan pada kaedah memohon dan kembali ke dalam mesin maya Java (JVM). Ini menjelaskan empat cara kaedah Java (dan asli) dapat digunakan, memberikan contoh kod yang menggambarkan empat cara, dan merangkumi kod byte yang relevan.

Kaedah memohon

Bahasa pengaturcaraan Java menyediakan dua jenis kaedah asas: kaedah contoh dan kaedah kelas (atau statik). Perbezaan antara dua jenis kaedah ini adalah:

  1. Instancekaedah memerlukan contoh sebelum boleh dipanggil, sedangkan classkaedah tidak.
  2. Instancekaedah menggunakan pengikatan dinamik (lewat), sedangkan classkaedah menggunakan pengikatan statik (awal).

Apabila mesin maya Java menggunakan kaedah kelas, ia memilih kaedah untuk dipanggil berdasarkan jenis rujukan objek, yang selalu diketahui pada waktu kompilasi. Sebaliknya, apabila mesin maya menggunakan kaedah contoh, ia memilih kaedah untuk dipanggil berdasarkan kelas sebenar objek, yang hanya dapat diketahui pada waktu berjalan.

JVM menggunakan dua arahan yang berbeza, ditunjukkan dalam jadual berikut, untuk menggunakan dua jenis kaedah ini: invokevirtual untuk instancekaedah, dan invokestatic untuk classkaedah.