Bagi Anda yang ingin menjadi seorang Java Developer, tahukah Anda sebuah program Java berjalan dengan baik di berbagai sistem operasi karena adanya Java Virtual Machine atau JVM. Apa itu Java Virtual Machine? simak ulasannya berikut ini.

Apa Itu Java Virtual Machine?

Java Virtual Machine (JVM) adalah mesin yang menyediakan lingkungan runtime untuk menjalankan kode dalam aplikasi Java. Mesin itulah yang 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.

Cara Kerja Java Virtual Machine

Java Virtual Machine

Sumber Foto : javatpoint.com

 

1. Class loader

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 threadStacks 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.

Baca juga : Begini Cara Menjadi Senior Java Developer

(Visited 30 times, 1 visits today)