Memastikan Programmu Berjalan Mulus, Kenalan dengan Java Virtual Machine
Tahukah kamu apa yang membuat sebuah program Java berjalan dengan baik di berbagai sistem operasi? Java Virtual Machine atau JVM adalah mesin abstrak yang membuat program tersebut berjalan dengan baik.
Aplikasi Java disebut WORA (Write Once Run Anywhere).
Ini artinya kamu dapat mengembangkan kode Java pada satu sistem dan dapat mengharapkannya untuk berjalan di sistem lain yang mendukung Java tanpa penyesuaian apa pun.
Ini semua dimungkinkan karena JVM. Seperti apa cara kerjanya? Simak selengkapnya dalam artikel berikut.
Isi Artikel
Apa Itu Java Virtual Machine?
Java Virtual Machine (JVM) adalah mesin yang menyediakan lingkungan runtime untuk menjalankan kode dalam aplikasi Java.
Mesin ini mengubah bytecode Java menjadi bahasa mesin. JVM sendiri merupakan bagian dari Java Run Environment (JRE).
Dalam bahasa pemrograman lain, compiler menghasilkan kode mesin untuk sistem tertentu. Namun, compiler Java menghasilkan kode untuk mesin virtual yaitu Java Virtual Machine.
Menurut Info World, JVM memiliki dua fungsi utama. Pertama, untuk memungkinkan program Java berjalan pada perangkat atau sistem operasi apa pun.
Fungsi ini dikenal sebagai prinsip WORA yang telah dijelaskan di atas.
Kemudian yang kedua adalah untuk mengelola dan mengoptimalkan memori program.
Ketika Java dirilis pada tahun 1995, semua program komputer ditulis ke sistem operasi tertentu, dan memori program dikelola oleh software developer.
Arsitektur dan Cara Kerja JVM
1. Class loader
Menurut Geeks for Geeks, class loader secara umum bertanggung jawab untuk tiga tugas berikut.
a. Loading
Class loader membaca file .class, menghasilkan data biner yang sesuai dan menyimpannya di area metode. Untuk setiap file .class, JVM menyimpan informasi berikut di area metode.
- Nama kelas yang dimuat sepenuhnya dan kelas induk langsungnya.
- Apakah file .class terkait dengan Class atau Interface atau Enum.
- Modifier, variabel, informasi metode dan sebagainya.
Setelah memuat file .class, JVM membuat objek berjenis Class untuk mewakili file ini di memory heap.
Objek ini adalah tipe Class yang telah ditentukan sebelumnya dalam paket java.lang.
Objek Class ini dapat digunakan oleh pemrogram untuk mendapatkan informasi tingkat kelas seperti nama kelas, nama induk, metode, informasi variabel, dan lainnya.
b. Linking
Tugas linking pada JVM adalah melakukan verifikasi, persiapan, dan sekali waktu melakukan resolusi.
- Verifikasi dilakukan memastikan kebenaran file .class yaitu memeriksa apakah file ini diformat dengan benar dan dihasilkan oleh kompiler yang valid atau tidak. Jika verifikasi gagal, kamu akan mendapatkan pengecualian run-time java.lang.VerifyError.
- Persiapan, JVM akan mengalokasikan memori untuk variabel kelas dan menginisialisasi memori ke nilai default.
- Resolusi, yaitu proses mengganti referensi simbolik dari tipe dengan referensi langsung. Ini dilakukan dengan mencari ke area metode untuk menemukan entitas yang direferensikan.
c. Initialization
Dalam fase ini, semua variabel statis ditetapkan dengan nilainya yang ditentukan dalam kode dan blok statis (jika ada).
Ini dijalankan dari atas ke bawah dalam sebuah kelas dan berdasarkan hierarki kelas.
2. JVM Memory
a. Method area
Di area ini, semua informasi tingkat kelas seperti nama kelas, nama kelas induk langsung, metode, dan informasi variabel, dan sebagainya isimpan, termasuk variabel statis.
Hanya ada satu area metode per JVM, dan itu adalah sumber daya bersama.
b. Heap area
Informasi dari semua objek disimpan di heap area. Meski demikian, hanya ada satu heap area per JVM. Ini juga merupakan bagian dari sumber daya bersama.
c. Stack area
Untuk setiap thread, JVM membuat satu tumpukan run-time yang disimpan di stack area. Setiap blok tumpukan ini disebut catatan aktivasi/bingkai tumpukan yang menyimpan panggilan metode.
Semua variabel lokal dari metode itu disimpan dalam bingkai yang sesuai. Setelah thread dihentikan, tumpukan run-time-nya akan dihancurkan oleh JVM. Sayangnya, ini bukan bagian dari sumber daya bersama.
d. PC registers
PC registers menyimpan alamat instruksi eksekusi saat ini dari sebuah thread. Tentunya, setiap utas memiliki PC registers terpisah.
e. Native method stacks
Native stacks dibuat untuk setiap thread. Stacks ini menyimpan informasi mengenai native method.
3. Execution engine
Execution engine menjalankan .class (bytecode). Mesin ini membaca bytecode baris demi baris, menggunakan data dan informasi yang ada di berbagai area memori dan menjalankan instruksi. Ini dapat diklasifikasikan dalam tiga bagian.
- Interpreter
- Just-in-time compiler
- Garbage collector
4. Java Native Interface (JNI)
JNI adalah antarmuka yang berinteraksi dengan Native Method Libraries dan menyediakan perpustakaan asli (C, C ++) yang diperlukan untuk eksekusi.
Ini memungkinkan JVM memanggil library C atau C++ dan dipanggil oleh library C atau C ++ yang mungkin khusus untuk perangkat keras.
Tanpa Java Virtual Machine, program yang kamu buat tidak akan berjalan dengan lancar terlepas dari sistem operasi yang digunakan.
Kamu bisa mempelajari lebih lanjut mengenai pemograman dengan mengikuti Glints ExpertClass, lho.
Glints Expert Class merupakan webinar yang menhadirkan para profesional dari berbagai bidang keahlian. Kamu bisa belajar dan bertanya langsung kepada mereka sesuai dengan topik yang diangkat.
Apakah kamu tertarik? Yuk, daftar sekarang sebelum kamu kehabisan kuota!