Apa itu JVM?
Java Virtual Machine (JVM) adalah mesin yang menyediakan lingkungan runtime untuk menjalankan Kode atau aplikasi Java. Ini 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 dipatuhi menjadi bytecode. Bytecode ini diinterpretasikan pada mesin yang berbeda
Antara sistem host dan sumber Java, Bytecode adalah bahasa perantara.
JVM di Java bertanggung jawab untuk mengalokasikan ruang memori.
Dalam tutorial JVM ini, Anda akan belajar-
- Arsitektur JVM
- Proses Kompilasi & Eksekusi Kode Perangkat Lunak
- Proses Kompilasi dan Eksekusi kode C
- Proses Kompilasi dan Eksekusi kode Java
- Mengapa Java ditafsirkan dan Dikompilasi?
- Mengapa Java lambat?
Arsitektur JVM
Sekarang dalam tutorial JVM ini, mari kita pahami Arsitektur JVM. Arsitektur JVM di Java berisi classloader, area memori, mesin eksekusi, dll.1) ClassLoader
Pemuat kelas adalah subsistem yang digunakan untuk memuat file kelas. Itu melakukan tiga fungsi utama yaitu. Memuat, Menghubungkan, dan Inisialisasi.
2) Area Metode
Area Metode JVM menyimpan struktur kelas seperti metadata, kumpulan waktu proses konstan, dan kode untuk metode.
3) Heap
Semua Objek, variabel instan terkait, dan array disimpan di heap. Memori ini umum dan digunakan bersama di beberapa utas.
4) Tumpukan bahasa JVM
Bahasa Java Stacks menyimpan variabel lokal, dan itu hasil parsial. Setiap utas memiliki tumpukan JVM sendiri, dibuat secara bersamaan saat utas dibuat. Bingkai baru dibuat setiap kali metode dipanggil, dan dihapus ketika proses pemanggilan metode selesai.
5) Register PC
Register PC menyimpan alamat instruksi mesin virtual Java yang sedang dijalankan. Di Java, setiap utas memiliki register PC terpisah.
6) Tumpukan Metode Asli
Tumpukan metode asli menampung instruksi kode asli bergantung pada perpustakaan asli. Itu ditulis dalam bahasa lain selain Java.
7) Mesin Eksekusi
Ini adalah jenis perangkat lunak yang digunakan untuk menguji perangkat keras, perangkat lunak, atau sistem lengkap. Mesin pelaksana uji tidak pernah membawa informasi apa pun tentang produk yang diuji.
8) Antarmuka Metode Asli
Antarmuka Metode Asli adalah kerangka kerja pemrograman. Ini memungkinkan kode Java yang berjalan di JVM untuk dipanggil oleh perpustakaan dan aplikasi asli.
9) Perpustakaan Metode Asli
Perpustakaan Native 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, Anda memerlukan yang berikut ini
1) Editor - Untuk mengetik program Anda, notepad dapat digunakan untuk ini
2) Compiler - Untuk mengubah program bahasa tinggi Anda menjadi kode mesin asli
3) Linker - Untuk menggabungkan referensi file program yang berbeda dalam program utama Anda bersama-sama.
4) Loader - Untuk memuat file dari perangkat penyimpanan sekunder Anda seperti Hard Disk, Flash Drive, CD ke dalam RAM untuk dieksekusi. Pemuatan dilakukan secara otomatis saat Anda menjalankan kode Anda.
5) Eksekusi - Eksekusi aktual dari kode yang ditangani oleh OS & prosesor Anda.
Dengan latar belakang ini, lihat video berikut & pelajari cara kerja internal JVM dan arsitektur JVM (Java Virtual Machine).
Klik di sini jika video tidak dapat diakses
Proses Kompilasi dan Eksekusi kode C
Untuk memahami proses kompilasi Java di Java. Mari kita lihat sekilas proses kompilasi dan penautan di C.
Misalkan di main, Anda memanggil dua fungsi f1 dan f2. Fungsi utama disimpan dalam file a1.c.
Fungsi f1 disimpan dalam file a2.c
Fungsi f2 disimpan dalam file a3.c
Semua file ini, yaitu a1.c, a2.c, dan a3.c, diumpankan ke kompilator. Yang outputnya adalah file objek yang sesuai yang merupakan kode mesin.
Langkah selanjutnya adalah mengintegrasikan semua file objek ini ke dalam satu file .exe dengan bantuan linker. Linker akan menggabungkan semua file ini menjadi satu dan menghasilkan file .exe.
Selama program dijalankan, program loader akan memuat a.exe ke dalam RAM untuk dieksekusi.
Kompilasi dan Eksekusi kode Java di VM Java
Sekarang dalam tutorial JVM ini, mari kita lihat proses untuk JAVA. Di utama Anda, Anda memiliki dua metode f1 dan f2.
- Metode utama disimpan dalam file a1.java
- f1 disimpan dalam file sebagai a2.java
- f2 disimpan dalam file sebagai a3.java
Kompiler akan mengkompilasi ketiga file tersebut dan menghasilkan 3 file .class terkait yang terdiri dari kode BYTE. Tidak seperti C, tidak ada penautan yang dilakukan .
Java VM atau Java Virtual Machine berada di RAM. Selama eksekusi, dengan menggunakan pemuat kelas, file kelas dibawa ke dalam RAM. Kode BYTE diverifikasi untuk setiap pelanggaran keamanan.
Selanjutnya, mesin eksekusi akan mengubah Bytecode menjadi kode mesin Native. Ini baru dalam waktu kompilasi. Ini adalah salah satu alasan utama mengapa Java relatif lambat.
CATATAN: JIT atau kompiler Just-in-time adalah bagian dari Java Virtual Machine (JVM). Ini menafsirkan bagian dari Kode Byte yang memiliki fungsi serupa pada saat yang sama.
Mengapa Java merupakan Bahasa yang Ditafsirkan dan Dikompilasi?
Bahasa pemrograman diklasifikasikan sebagai- Bahasa Tingkat Tinggi Ex. C ++, Java
- Bahasa Tingkat Menengah Mis. C
- Perakitan Ex Bahasa Tingkat Rendah
- akhirnya level terendah sebagai Bahasa Mesin.
Sebuah compiler adalah program yang mengubah program dari satu tingkat dari bahasa ke bahasa lain. Contoh konversi program C ++ menjadi kode mesin.
Kompilator java mengubah kode java tingkat tinggi menjadi bytecode (yang juga merupakan jenis kode mesin).
Sebuah interpreter adalah program yang mengubah program pada satu tingkat ke bahasa pemrograman lain pada tingkat yang sama. Contoh konversi program Java menjadi C ++
Di Java, generator Just In Time Code mengubah bytecode menjadi kode mesin asli yang berada pada tingkat pemrograman yang sama.
Oleh karena itu, Java adalah bahasa yang dikompilasi dan juga ditafsirkan.
Mengapa Java lambat?
Dua alasan utama di balik lambatnya Java adalah
- Dynamic Linking: Tidak seperti C, penautan dilakukan pada saat run-time, setiap kali program dijalankan di Java.
- Run-time Interpreter: Konversi kode byte menjadi kode mesin asli dilakukan pada saat run-time di Java yang semakin memperlambat kecepatan
Namun, versi terbaru Java telah mengatasi sebagian besar hambatan kinerja.
Ringkasan :
- Bentuk lengkap JVM adalah Java Virtual Machine. JVM di Java adalah mesin yang menjalankan Kode Java. Ini mengubah bytecode Java menjadi bahasa mesin.
- Arsitektur JVM di Java berisi classloader, area memori, mesin eksekusi, dll.
- Di JVM, kode Java dikompilasi menjadi bytecode. Bytecode ini diinterpretasikan pada mesin yang berbeda
- JIT adalah singkatan dari Just-in-time compiler. JIT adalah bagian dari Java Virtual Machine (JVM). Ini digunakan untuk mempercepat waktu eksekusi
- Dibandingkan dengan mesin kompilator lain, JVM di Java mungkin lambat dalam eksekusi.