Perbedaan Antara JVM, JRE, dan JDK

1. Ikhtisar

Pada artikel ini, kita akan membahas perbedaan antara JVM, JRE, dan JDK dengan mempertimbangkan komponen dan kegunaannya.

2. JVM

Java Virtual Machine (JVM) adalah implementasi dari mesin virtual yang menjalankan program Java.

JVM pertama menafsirkan bytecode. Kemudian menyimpan informasi kelas di area memori. Akhirnya, ia mengeksekusi bytecode yang dihasilkan oleh compiler java.

Ini adalah mesin komputasi abstrak dengan set instruksi sendiri dan memanipulasi berbagai area memori saat runtime.

Komponen JVM adalah:

  • Pemuat Kelas
  • Area Data Run-Time
  • Mesin Eksekusi

2.1. Pemuat Kelas

Tugas awal JVM termasuk memuat, memverifikasi, dan menghubungkan bytecode. Pemuat kelas menangani tugas-tugas ini.

Kami memiliki artikel terperinci khusus tentang pemuat kelas.

2.2. Area Data Run-Time

JVM mendefinisikan berbagai area memori untuk menjalankan program Java. Ini digunakan selama runtime dan dikenal sebagai area data run-time. Beberapa area ini dibuat saat JVM mulai dan dihancurkan saat JVM keluar sementara beberapa area dibuat saat utas dibuat dan dihancurkan saat utas keluar.

Mari pertimbangkan area ini satu per satu:

Metode Area

Pada dasarnya, area metode dianalogikan dengan area penyimpanan untuk kode yang dikompilasi. Ini menyimpan struktur seperti kumpulan konstanta run-time, data bidang dan metode, kode untuk metode dan konstruktor serta nama kelas yang sepenuhnya memenuhi syarat. JVM menyimpan struktur ini untuk setiap kelas.

Area metode, juga dikenal sebagai ruang pembangkitan permanen (PermGen), dibuat saat JVM dijalankan. Memori untuk area ini tidak perlu bersebelahan. Semua utas JVM berbagi area memori ini.

Area Tumpukan

JVM mengalokasikan memori untuk semua instance kelas dan array dari area ini.

Garbage Collector (GC) mengambil kembali memori heap untuk objek. Pada dasarnya, GC memiliki tiga fase untuk mendapatkan kembali memori dari objek yaitu. dua GC minor dan satu GC mayor.

Memori heap memiliki tiga bagian:

  • Eden Space - itu bagian dari ruang Generasi Muda. Saat kita membuat objek, JVM mengalokasikan memori dari ruang ini
  • Survivor Space - itu juga bagian dari ruang Generasi Muda. Ruang penyintas berisi objek yang ada yang selamat dari fase GC minor
  • Ruang Bertahan - ini juga dikenal sebagai Ruang Generasi Tua. Ini menyimpan benda-benda yang bertahan lama. Pada dasarnya, ambang batas ditetapkan untuk objek Generasi Muda dan ketika ambang batas ini terpenuhi, objek tersebut dipindahkan ke ruang bertenor.

JVM membuat area heap segera setelah dijalankan. Semua utas JVM berbagi area ini. Memori untuk area heap tidak perlu bersebelahan.

Area tumpukan

Menyimpan data sebagai frame dan setiap frame menyimpan variabel lokal, hasil parsial, dan panggilan metode bertingkat. JVM membuat area tumpukan setiap kali itu membuat utas baru. Area ini bersifat pribadi untuk setiap utas.

Setiap entri dalam tumpukan disebut Stack Frame atau Rekaman aktivasi. Setiap bingkai berisi tiga bagian:

  • Local Variable Array - berisi semua variabel lokal dan parameter metode
  • Operand Stack - digunakan sebagai ruang kerja untuk menyimpan hasil kalkulasi menengah
  • Frame Data - digunakan untuk menyimpan hasil parsial, mengembalikan nilai untuk metode, dan referensi ke tabel Exception yang menyediakan informasi blok catch terkait dalam kasus pengecualian

Memori untuk tumpukan JVM tidak perlu bersebelahan.

Register PC

Setiap utas JVM memiliki Register PC terpisah yang menyimpan alamat instruksi yang sedang dijalankan. Jika instruksi yang saat ini dijalankan adalah bagian dari metode asli maka nilai ini tidak ditentukan.

Tumpukan metode asli

Metode asli adalah metode yang ditulis dalam bahasa selain Java.

JVM memberikan kemampuan untuk memanggil metode asli ini. Tumpukan metode asli juga dikenal sebagai "tumpukan C". Mereka menyimpan informasi metode asli. Setiap kali metode asli dikompilasi menjadi kode mesin, metode tersebut biasanya menggunakan tumpukan metode asli untuk melacak statusnya.

JVM membuat tumpukan ini setiap kali JVM membuat utas baru. Dan dengan demikian utas JVM tidak membagikan area ini.

2.3. Mesin Eksekusi

Mesin eksekusi menjalankan instruksi menggunakan informasi yang ada di area memori. Ini memiliki tiga bagian:

Penerjemah

Setelah classloader memuat dan memverifikasi bytecode, interpreter akan menjalankan bytecode baris demi baris. Eksekusi ini cukup lambat. Kerugian dari interpreter adalah ketika satu metode dipanggil berkali-kali, setiap interpretasi baru diperlukan.

Namun, JVM menggunakan JIT Compiler untuk mengurangi kerugian ini.

Penyusun Just-In-Time (JIT)

Compiler JIT mengkompilasi bytecode dari metode yang sering disebut ke dalam kode native pada saat run-time. Oleh karena itu bertanggung jawab untuk optimalisasi program Java.

JVM secara otomatis memantau metode mana yang sedang dijalankan. Setelah metode memenuhi syarat untuk kompilasi JIT, metode itu dijadwalkan untuk kompilasi menjadi kode mesin. Cara ini kemudian dikenal sebagai metode panas. Kompilasi menjadi kode mesin ini terjadi pada thread JVM yang terpisah.

Akibatnya, itu tidak mengganggu eksekusi program saat ini. Setelah dikompilasi menjadi kode mesin, ini berjalan lebih cepat.

Pengumpul sampah

Java menangani manajemen memori menggunakan Koleksi Sampah. Ini adalah proses melihat memori heap, mengidentifikasi objek mana yang sedang digunakan dan mana yang tidak, dan akhirnya menghapus objek yang tidak digunakan.

GC adalah utas daemon. Ini dapat disebut secara eksplisit menggunakan Sistem. gc () , bagaimanapun, itu tidak akan segera dijalankan dan JVM memutuskan kapan akan memanggil GC.

2.4. Antarmuka Asli Java

Ini bertindak sebagai antarmuka antara kode Java dan library native (C / C ++).

Ada situasi di mana Java saja tidak memenuhi kebutuhan aplikasi Anda, misalnya, mengimplementasikan fitur yang bergantung pada platform.

Dalam kasus tersebut, kita dapat menggunakan JNI untuk mengaktifkan kode yang berjalan di JVM untuk dipanggil. Sebaliknya, ini memungkinkan metode asli untuk memanggil kode yang berjalan di JVM.

2.5. Perpustakaan Asli

Ini adalah pustaka khusus platform dan berisi implementasi metode asli.

3. JRE

Java Runtime Environment (JRE) adalah kumpulan komponen perangkat lunak yang digunakan untuk menjalankan aplikasi Java.

Komponen inti JRE meliputi:

  • Implementasi Java Virtual Machine (JVM)
  • Kelas yang diperlukan untuk menjalankan program Java
  • File Properti

Kami membahas JVM di bagian atas. Di sini kita akan fokus pada kelas inti dan file pendukung.

3.1. Kelas Bootstrap

Kami akan menemukan kelas bootstrap di bawah jre / lib / . Jalur ini juga dikenal sebagai jalur kelas bootstrap. Itu termasuk:

  • Kelas runtime di rt.jar
  • Kelas internasionalisasi di i18n.jar
  • Kelas konversi karakter di charsets.jar
  • Lainnya

Bootstrap ClassLoader memuat kelas-kelas ini saat JVM dijalankan.

3.2. Kelas Ekstensi

Kita dapat menemukan kelas ekstensi di jre / lib / extn / yang bertindak sebagai direktori untuk ekstensi ke platform Java. Jalur ini juga dikenal sebagai jalur kelas ekstensi.

Ini berisi pustaka runtime JavaFX di jfxrt.jar dan data lokal untuk paket java.text dan java.util di localedata.jar . Pengguna juga dapat menambahkan toples khusus ke dalam direktori ini.

3.3. Pengaturan Properti

Platform Java menggunakan pengaturan properti ini untuk mempertahankan konfigurasinya. Bergantung pada penggunaannya, mereka berada di folder berbeda di dalam / jre / lib / . Ini termasuk:

  • Konfigurasi kalender di calendar.properties
  • Konfigurasi logging di logging.properties
  • Konfigurasi jaringan di net.properties
  • Properti penerapan di / jre / lib / deploy /
  • Properti manajemen di / jre / lib / management /

3.4. File Lainnya

Selain file dan class yang disebutkan di atas, JRE juga berisi file untuk hal-hal lain:

  • Manajemen keamanan di jre / lib / security
  • Direktori untuk menempatkan kelas pendukung untuk applet di jre / lib / applet
  • File terkait font di jre / lib / font dan lainnya

4. JDK

Java Development Kit (JDK) menyediakan lingkungan dan alat untuk mengembangkan, mengompilasi, men-debug, dan menjalankan program Java.

Komponen inti JDK meliputi:

  • JRE
  • Alat Pengembangan

Kami membahas JRE di bagian atas.

Sekarang, kami akan fokus pada berbagai alat pengembangan. Mari kita kategorikan alat ini berdasarkan penggunaannya:

4.1. Alat Dasar

Alat-alat ini meletakkan dasar JDK dan digunakan untuk membuat dan membangun aplikasi Java. Di antara alat-alat ini, kita dapat menemukan utilitas untuk kompilasi, debugging, pengarsipan, pembuatan Javadocs, dll.

Mereka termasuk:

  • javac - membaca definisi kelas dan antarmuka dan mengkompilasinya ke dalam file kelas
  • java - meluncurkan aplikasi Java
  • javadoc - menghasilkan halaman HTML dokumentasi API dari file sumber Java
  • apt - menemukan dan menjalankan pemroses anotasi berdasarkan anotasi yang ada di kumpulan file sumber yang ditentukan
  • appletviewer - memungkinkan kita menjalankan applet Java tanpa browser web
  • jar - mengemas applet atau aplikasi Java ke dalam satu arsip
  • jdb - alat debugging baris perintah yang digunakan untuk menemukan dan memperbaiki bug dalam aplikasi Java
  • javah - menghasilkan file header dan sumber C dari kelas Java
  • javap - membongkar file kelas dan menampilkan informasi tentang bidang, konstruktor, dan metode yang ada dalam file kelas
  • extcheck - mendeteksi konflik versi antara file Java Archive (JAR) target dan file JAR ekstensi yang saat ini diinstal

4.2. Alat Keamanan

Ini termasuk alat manajemen kunci dan sertifikat yang digunakan untuk memanipulasi Java Keystore.

Java Keystore adalah wadah untuk sertifikat otorisasi atau sertifikat kunci publik. Akibatnya, ini sering digunakan oleh aplikasi berbasis Java untuk enkripsi, otentikasi, dan penyajian melalui HTTPS.

Selain itu, mereka membantu untuk menetapkan kebijakan keamanan pada sistem kami dan membuat aplikasi yang dapat bekerja dalam lingkup kebijakan ini di lingkungan produksi. Ini termasuk:

  • keytool - membantu dalam mengelola entri keystore, yaitu, kunci dan sertifikat kriptografi
  • jarsigner - menghasilkan file JAR yang ditandatangani secara digital dengan menggunakan informasi keystore
  • policytool - memungkinkan kita untuk mengelola file konfigurasi kebijakan eksternal yang menentukan kebijakan keamanan instalasi

Beberapa alat keamanan juga membantu dalam mengelola tiket Kerberos.

Kerberos adalah protokol otentikasi jaringan.

Ini bekerja berdasarkan tiket untuk memungkinkan node berkomunikasi melalui jaringan yang tidak aman untuk membuktikan identitas mereka satu sama lain dengan cara yang aman:

  • kinit - digunakan untuk mendapatkan dan menyimpan tiket pemberian tiket Kerberos
  • ktab - mengelola nama prinsip dan pasangan kunci dalam tabel kunci
  • klist - menampilkan entri di cache kredensial lokal dan tabel kunci

4.3. Alat Internasionalisasi

Internasionalisasi adalah proses merancang aplikasi agar dapat disesuaikan dengan berbagai bahasa dan wilayah tanpa perubahan teknik.

Untuk tujuan ini, JDK menghadirkan native2ascii. Alat ini mengonversi file dengan karakter yang didukung oleh JRE menjadi file yang dikodekan dalam ASCII atau pelolosan Unicode.

4.4. Alat Doa Metode Jarak Jauh (RMI)

Alat RMI memungkinkan komunikasi jarak jauh antara aplikasi Java sehingga memberikan ruang lingkup untuk pengembangan aplikasi terdistribusi.

RMI memungkinkan objek yang berjalan di satu JVM untuk memanggil metode pada objek yang berjalan di JVM lain. Alat-alat ini meliputi:

  • rmic - menghasilkan kelas rintisan, kerangka, dan pengikat untuk objek jarak jauh menggunakan Java Remote Method Protocol (JRMP) atau Internet Inter-Orb Protocol (IIOP)
  • rmiregistry - membuat dan memulai registri objek jarak jauh
  • rmid - memulai daemon sistem aktivasi. Hal ini memungkinkan objek untuk didaftarkan dan diaktifkan di Mesin Virtual Java
  • serialver - mengembalikan UID versi serial untuk kelas tertentu

4.5. Alat IDL dan RMI-IIOP Java

Java Interface Definition Language (IDL) menambahkan kapabilitas Common Object-Based Request Broker Architecture (CORBA) ke platform Java.

Alat-alat ini memungkinkan aplikasi web Java terdistribusi untuk menjalankan operasi pada layanan jaringan jarak jauh menggunakan standar industri Object Management Group (OMG) - IDL.

Demikian juga, kita bisa menggunakan Internet InterORB Protocol (IIOP).

RMI-IIOP, yaitu RMI over IIOP memungkinkan pemrograman server dan aplikasi CORBA melalui RMI API. Dengan demikian memungkinkan koneksi antara dua aplikasi yang ditulis dalam bahasa apa pun yang sesuai dengan CORBA melalui Internet InterORB Protocol (IIOP).

Alat-alat ini meliputi:

  • tnameserv - Transient Naming Service yang menyediakan direktori terstruktur pohon untuk referensi objek
  • idlj - Kompiler IDL-ke-Java untuk menghasilkan pengikatan Java untuk file IDL yang ditentukan
  • orbd - memungkinkan klien untuk secara transparan menemukan dan menjalankan objek persisten di server di lingkungan CORBA
  • servertool - menyediakan antarmuka baris perintah untuk mendaftarkan atau membatalkan pendaftaran server persisten dengan ORB Daemon ( orbd ), memulai dan mematikan server persisten yang terdaftar dengan ORB Daemon, dan sebagainya

4.6. Alat Penyebaran Java

Alat-alat ini membantu dalam menyebarkan aplikasi Java dan applet di web. Mereka termasuk:

  • pack200 - mengubah file JAR menjadi file pack200 menggunakan kompresor gzip Java
  • unpack200 - mengubah file pack200 menjadi file JAR

4.7. Alat Plug-in Java

JDK memberi kita htmlconverter. Selain itu, ini digunakan bersama dengan Plug-in Java.

Di satu sisi, Java Plug-in membuat koneksi antara browser populer dan platform Java. Sebagai hasil dari koneksi ini, applet di situs web dapat berjalan di dalam browser.

Di sisi lain, htmlconverter adalah utilitas untuk mengubah halaman HTML yang berisi applet ke format untuk Java Plug-in.

4.8. Alat Mulai Web Java

JDK membawa rahang. Kita dapat menggunakannya bersama dengan Java Web Start.

Alat ini memungkinkan kita mengunduh dan meluncurkan aplikasi Java dengan satu klik dari browser. Karenanya, tidak perlu menjalankan proses instalasi apa pun.

4.9. Alat Pemantauan dan Manajemen

Ini adalah alat hebat yang dapat kita gunakan untuk memantau kinerja JVM dan konsumsi sumber daya. Berikut ini beberapa di antaranya:

  • jconsole - menyediakan konsol grafis yang memungkinkan Anda memantau dan mengelola aplikasi Java
  • jps - mencantumkan JVM berinstrumen pada sistem target
  • jstat - memonitor statistik JVM
  • jstatd - memantau pembuatan dan penghentian JVM berinstrumen

4.10. Alat Pemecahan Masalah

Ini adalah alat eksperimental yang dapat kami manfaatkan untuk memecahkan masalah tugas :

  • info - menghasilkan informasi konfigurasi untuk proses Java yang ditentukan
  • jmap - mencetak peta memori objek bersama atau detail memori tumpukan dari proses tertentu
  • jsadebugd - melampirkan ke proses Java dan bertindak sebagai server debug
  • jstack - mencetak jejak tumpukan Java dari thread Java untuk proses Java tertentu

5. Kesimpulan

Pada artikel ini, kami mengidentifikasi bahwa perbedaan mendasar antara JVM, JRE, dan JDK terletak pada penggunaannya.

Pertama, kami menjelaskan bagaimana JVM adalah mesin komputasi abstrak yang benar-benar menjalankan bytecode Java.

Kemudian, kami menjelaskan cara menjalankan aplikasi Java, kami menggunakan JRE.

Dan terakhir, kami mengerti bagaimana mengembangkan aplikasi Java, kami menggunakan JDK.

Kami juga meluangkan waktu untuk menggali alat dan konsep dasar dari komponen ini.