Java Virtual Machine dan Fungsinya
Sebelum mempelajari materi tentang Java Virtual Machine dan Fungsinya, terlebih dahulu pelajari materi tentang: Cara Membangun Lingkungan Pengembangan Java, Membuat Program Hello World Java, dan Sistem Penamaan Bahasa Pemrograman Java.
Loading:
Class Loader membaca file .class, kemudian menghasilkan data biner dan menyimpannya sesuai dengan area method. Untuk setiap file .class, JVM menyimpan beberapa informasi pada area method yang terdiri dari beberapa hal berikut, yaitu:- Nama kualifikasi penuh dari class loading dan class parent terdekatnya.
- .class file tersebut terhubung dengan Class, Interface, atau Enum.
- Modifier, Variabel, Method, dan lain sebagainya.
Contoh:
/* Program java memperlihatkan class tipe bekerja diciptakan oleh JVM .class file untuk ditampilkan pada objek memori */
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/* Kode Java menampilkan fungsi class objek melalui JVM */
/* nama class dibuat sesuai nama file program atau project */
public class JavaApplication4
{
public static void main(String[] args)
{
/* ciptakan class baru dengan nama s1 dengan tipe data Student oleh JVM Student adalah class dengan tipe data class */
Student s1 = new Student();
/* Ciptakan class baru dengan nama c1 yang nilainya ditransfer dari class s1 */
Class c1 = s1.getClass();
/* cetak objek bertipe teks dan tampilkan pada layar monitor yang datanya diambil dari objek class c1.getName() */
System.out.println(c1.getName());
/* ciptakan method array baru dengan nama m [] bertipe data method yang nilainya diambil dari class c1 */
Method m[] = c1.getDeclaredMethods();
for (Method method : m)
System.out.println(method.getName());
/* mendapatkan nilai f[] dengan tipe data field dari class c1 */
Field f[] = c1.getDeclaredFields();
for (Field field : f)
System.out.println(field.getName());
}
}
/* Contoh class yang dibuat dengan nama Student dan tipe data class yang akan digunakan pada main method diatas */
class Student
{
private String name;
private int roll_No;
public String getName() { return name;
}
public void setName(String name) { this.name = name; }
public int getRoll_no() { return roll_No; }
public void setRoll_no(int roll_no)
{
this.roll_No = roll_no;
}
}
Linking:
Terdiri dari tiga tahap yaitu: verifikasi, persiapan, dan resolution (optional).- Verifikasi adalah memastikan .class file sudah diperiksa secara benar atau belum, dan apakah file tersebut sudah di format dan dihasilkan dengan benar oleh kompilator. Jika proses verifikasi gagal, maka runtime exception akan menjalankan java.lang.VerifyError.
- Persiapan atau preparation adalah proses dimana JVM mengalokasikan memori untuk variabel class dan menginisialisasi memori ke dalam nilai default.
- Resolution adalah proses penggantian referensi simbol dari ketikkan ke referensi langsung. Proses resolusi dilakukan dengan cara mencari ke area method untuk menemukan referensi entitas.
Initialization:
Pada tahapan dilakukan inisialisasi semua variabel static yang ditugaskan sesuai dengan nilai yang telah terdefinisi pada kode program dan static block (jika ada). Proses tersebut dijalankan mulai dari tahap paling atas ke bawah (top-bottom) dan dari parent ke child dalam class hirarki.- Bootstrap class loader: Setiap implementasi JVM memiliki bootstrap class loader yang mampu melakukan loading ke class yang terpercaya. JVM melakukan loading ke pusat class Java API yang ditampilkan dalam direktori JAVA_HOME/jre/lib. Jalur ini lebih populer dengan sebutan jalur bootstrap.
- Extension class loader: merupakan turunan (child) dari bootstrap class loader. Extention class loader menampilkan direktori ekstensi JAVA_HOME/jre/lib/ext (jalur ekstensi) atau direktori spesifik lainnya dari jalur class aplikasi (application class path). Application class loader digunakan secara internal pada variabel lingkungan yang dipetakan ke java.class.path. Application class loader juga diimplementasikan dalam Java oleh class sun.misc.Launcher$AppClassLoader.
/* Kode Java menampilkan Class Loader subsystem */
public class PercobaanJVM
{
public static void main(String[] args)
{
/* loading class string oleh bootstrap loader, dan bootstrap loader bukanlah objek Java, oleh karena ini bernilai null */
System.out.println(String.class.getClassLoader());
/* Loading JavaApplication4 oleh aplikasi loader */
System.out.println(JavaApplication4.class.getClassLoader());
}
}
JVM Memori:
- Method area: mengandung semua level informasi class seperti class name, parent terdekat dari class name, informasi method dan variabel, dan lain sebagainya. Hanya terdapat satu area method pada setiap JVM dan method tersebut merupakan shared resource.
- Heap area: Semua informasi objek disediakan di heap area. Hanya terdapat satu heap area pada setiap JVM yang juga merupakan shared resource.
- Stack area: JVM menciptakan satu runtime stack yang disediakan untuk setiap thread. Setiap block pada setiap stack disebut sebagai activation record atau stack frame yang menyediakan method calls. Semua variabel lokal dari setiap method tersebut disediakan pada frame yang sesuai. Setelah thread dimatikan (terminate), maka runtime stack-nya pun akan dimatikan oleh JVM dan bukan merupakan bagian dari shared resource.
- PC registers: adalah alamat penyedia dari instruksi eksekusi sebelumnya dari thread. Pada dasarnya, setiap thread terpisah dari PC registers.
- Native method stacks: untuk setiap thread diciptakan stack native secara terpisah yang menyediakan informasi native method.
Execution Engine
- Interpreter: Interpreter berfungsi untuk menginterpretasikan tiap-tiap baris bytecode dan kemudian mengeksekusinya atau menjalankannya. Kekurangan dari interpreter adalah pada saat suatu fungsi dipanggil secara berulang maka interpreter pun akan dipanggil secara berulang pula.
- Just-in-Time Compiler (JIT): JIT digunakan untuk meningkatkan efisiensi dari interpreter. JIT melakukan kompilasi terhadap seluruh bytecode dan mengubahnya menjadi native code dimanapun interpreter melihat pemanggilan method secara terpisah, maka JIT menyediakan native code untuk bagian tersebut sehingga tidak diperlukan interpretasi secara berulang.
- Garbage Collector: Garbage Collector berfungsi untuk menghancurkan objek yang tidak berfungsi.
Java Native Interface (JNI)
JNI adalah intarmuka (interface) yang berinteraksi dengan Native Method Libraries dan menyediakan native libraries (C/C++) untuk proses eksekusi. JNI memungkinkan JVM untuk memanggil C/C++ libraries dan sebaliknya untuk dipanggil oleh C/C++ untuk kebutuhan khusus pada hardware.Native Method Libraries
Native method libraries adalah kumpulan dari Native Libraries (C dam C++) yang dibutuhkan oleh Execution Engine.7 komentar untuk "Java Virtual Machine dan Fungsinya"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
DAFTAR RUJUKAN
BalasHapusDavid J. Eck, Introduction to Programming Using Java, Seventh Edition, Version 7.0, August 2014 at Section 1.3 "The Java Virtual Machine"
HapusJVM itu bertugas sebagai mesin yang menjalankan aplikasi Java. JVM merupakan satu-satunya yang benar-benar melakukan pemanggilan main method pada kode program Java. JVM merupakan bagian dari JRE.
BalasHapusAplikasi Java disebut juga WORA atau Write Once Run Anywhere. Maksud dari istilah tersebut adalah setiap program yang telah dibuat oleh seorang programmer dalam sebuah sistem juga bisa dijalankan pada sistem lainnya dimana pada sistem tersebut sudah terpasang JVM.
JVM itu merupakan kepanjangan dari Java Virtual Machine.
BalasHapusSejak masa dimana setiap sistem komputer yang dikembangkan sudah mampu menciptakan sebuah program.
Contoh, jika kita mengembangkan program bahasa C atau C++ dan menjalankan program tersebut pada Windows maka program tersebut sifatnya tidak dapat berdiri sendiri, atau hanya dapat dijalankan pada OS windows itu saja atau pada sistem itu saja.
Namun pada bahasa pemrograman Java, JVM dapat mengambil alih pembuatan class file yang berkaitan dengan berbagai program (Java) dan dapat membuat program tersebut digunakan pada berbagai OS.
JVM juga bertindak sebagai interface atau antarmuka antara OS dan kode program yang dijalankan.
JVM memungkinkan pendistribusian program kompilasi Java tanpa adanya aturan pembatasan penggunaan dari kode biner atau library hanya terbatas pada satu jenis arsitektur kompoter saja, tapi bisa digunakan oleh berbagai jenis arsitektur komputer seperti Window dalam Intel, Linux dalam Inter, AMD, AIX dalam PowerSystem, dan lain sebagainya.
BalasHapusJVM membuat pengembang lebih mudah dalam membuat dan melakukan perawatan proram. Pada bahasa pemrograman lain (selain Java), kode program telah dibuat biasanya dikompilasi ke kode native, kemudian setelah dilakukan proses tersebut pengembang harus memutuskan jenis prosesor dan arsitektur komputer mesin jenis apa yang akan digunakan untuk kompilasi program, dan juga harus melakukan beberapa pemilihan lain untuk mengoptimalkan penggunaan kode program. Namun dengan JVM, kompilator akan langsung dapat menghasilkan "byte code" yang sudah langsung diterjemahkan ke kode native beberapa saat sebelum program dijalankan, dan pengoptimalan kode program dipilih otomatis berbadasrkan bagaimana program tersebut berjalan pada suatu sistem.
BalasHapusJVM juga membantu memberikan keamanan pada waktu proses dengan analisis kode yang digunakan untuk memeriksa instruksi yang tidak valid ataupun juga terhadap beberapa masalah keamanan program saat dijalankan pada suatu sistem komputer.
JVM digunakan untuk menjalankan byte code yang telah dikompilasi oleh bahasa seperti Java, Groovy, Scala, Clojure, dan Kotlin. Hal ini memungkinkan terjadinya suatu kemandirian platform, yang sejalan dengan filosofi "write one, run anywhere" atau WORA.
BalasHapusJVM sangat populer pengembangannya karekan ekosistem librarisnya yang banyak, dan framework yang dapat digunakan juga sangat banyak. Inilah alasan mengapa begitu banyak bahasa pemrograman yang diciptakan untuk dapat mengekploitasi ekosistem pengembangan tersebut. Selain bahasa program yang telah disebutkan sebelumnya, beberapa bahasa pemrograman lain juga turut mengembangkan ekosistem untuk bisa juga dijalankan pada JVM seperti Jtyhon, JRubu, Redline Smalltalk, Jabaco (Visual Basic), Renjin (R), Rakudo Perl 6, Armed Bear Common Lisp, Kawa (Scheme), dan lain sebagainya.