180 Views

Jika kalian telah belajar mengenai bahasa java, tentu ingin tahu donk, bagaimana Java bisa bekerja dibanyak sistem operasi. Nah didalam tulisan sebelumnya pasti kalian sudah install donk JRE – java runtime environment yang didalamnya ada teknologi JVM. Apa itu JVM? Java Virtual Machine (JVM) adalah mesin yang menyediakan lingkungan runtime untuk menjalankan Kode atau aplikasi Java dengan cara mengubah bytecode Java menjadi bahasa mesin. JVM adalah bagian dari Java Run Environment (JRE). Dalam bahasa pemrograman lain, kompilator menghasilkan kode mesin untuk sistem tertentu. Namun, compiler Java menghasilkan kode untuk Mesin Virtual yang dikenal sebagai Java Virtual Machine.

Berikut cara kerja JVM

Pertama, kode Java dikompikasi menjadi bytecode. Bytecode ini diinterpretasikan pada mesin yang berbeda. Antara sistem host dan sumber Java, Bytecode adalah bahasa perantara. JVM bertanggung jawab untuk mengalokasikan ruang memori. Kalau kalian mengenal teknologi net framework miliknya microsoft maka dikenal dengan MIL – Microsoft Intermediate Languange.

Arsitektur JVM

Mari kita pahami Arsitektur JVM. Ini berisi classloader, area memori, mesin eksekusi melalui diagram berikut
  1. ClassLoader: adalah subsistem yang digunakan untuk memuat file kelas dengan melakukan tiga fungsi utama yaitu. Memuat, Menautkan, dan Inisialisasi.
  2. Method Area: cara kerjanya yaitu menyimpan struktur kelas seperti metadata, kumpulan waktu proses konstan, dan kode untuk metode/function
  3. Heap: Semua Objek, variabel instan terkait, dan array disimpan di heap. Memori ini secara umum dan digunakan bersama pada thread
  4. JVM language Stacks: menyimpan variabel lokal, dan itu hasil secara terpisah. Setiap thread memiliki  JVM stack sendiri, yang dibuat secara bersamaan saat thread dibuat. Sebuah frame baru dibuat setiap kali sebuah metode dipanggil, dan itu dihapus ketika proses pemanggilan metode selesai seperti garbage collection
  5. PC Registers: menyimpan alamat instruksi mesin virtual Java yang sedang dijalankan sehingga setiap thread memiliki register PC terpisah.
  6. Native Method Stacks: memegang instruksi kode asli tergantung pada library aslinya seperti loading *.dll (windows), .so (di linux)
  7. Execution Engine: Ini adalah jenis perangkat lunak yang digunakan untuk menguji perangkat keras, perangkat lunak, atau sistem lengkap. Execution Engine uji tidak pernah membawa informasi apa pun tentang produk yang diuji sehingga security nya terjamin
  8. Native Method interface: adalah framework yang memungkinkan kode Java yang berjalan di JVM untuk dipanggil oleh perpustakaan dan aplikasi lain selain java
  9. Native Method Libraries: adalah kumpulan dari Native Libraries (C, C ++) yang dibutuhkan oleh Execution Engine.

Proses Kompilasi & Eksekusi Kode Perangkat Lunak

Untuk menulis dan menjalankan program perangkat lunak, kalian setidaknya memerlukan tahapan sebagai berikut

  1. Editor – Untuk mengetik  kode, misalkan menggunakan notepad
  2. Compiler – Untuk mengubah program bahasa high level menjadi kode mesin asli (sesuai dengan jenis prosesor)
  3. Linker – Untuk menggabungkan referensi file program yang berbeda dalam program utama.
  4. Loader – Untuk memuat file dari perangkat penyimpanan sekunder seperti Hard Disk, Flash Drive, CD ke dalam RAM untuk dieksekusi. Proses loading dilakukan secara otomatis
  5. Execution – Eksekusi aktual dari kode yang ditangani oleh OS & prosesor.

Java VM atau Java Virtual Machine berada di RAM. Selama eksekusi, dengan menggunakan class loader maka file *.class  dibawa ke dalam RAM. Kode BYTE diverifikasi terlebih dulu untuk dicek secure nya. Selanjutnya, mesin eksekusi akan mengubah Bytecode menjadi kode mesin Native semua proses ini dinamakan dengan proses kompilasi. Ini merupakan salah satu alasan utama mengapa Java relatif lambat.

JIT-Compiler just-in-time adalah bagian dari Java Virtual Machine (JVM) yang bertugas untuk intepretasikan bagian dari Kode Byte yang memiliki fungsi serupa pada saat yang sama.

Mengapa Java lambat?

Dua alasan utama di balik lambatnya Java adalah

  1. Dynamic Linking: Tidak seperti C dengan linking nya dilakukan hanya 1 kali saja, untuk di java proses linking dilakukan pada saat run-time atau setiap kali program dijalankan di Java.
  2. Run-time Interpreter: Konversi kode byte menjadi kode mesin asli dilakukan pada saat run-time di Java yang semakin memperlambat kecepatan.

ref:

www.java.org

 

Leave a Reply

Your email address will not be published. Required fields are marked *

30 + = 31