Perbezaan Antara JVM, JRE, dan JDK

1. Gambaran keseluruhan

Dalam artikel ini, kita akan membincangkan perbezaan antara JVM, JRE, dan JDK dengan mempertimbangkan komponen dan kegunaannya.

2. JVM

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

JVM pertama menafsirkan kod bytek. Ia kemudian menyimpan maklumat kelas di kawasan ingatan. Akhirnya, ia melaksanakan bytecode yang dihasilkan oleh penyusun java.

Ini adalah mesin pengkomputeran abstrak dengan set instruksinya sendiri dan memanipulasi pelbagai kawasan memori pada waktu runtime.

Komponen JVM adalah:

  • Pemuat Kelas
  • Kawasan Data Masa Larian
  • Enjin Pelaksanaan

2.1. Pemuat Kelas

Tugas awal JVM merangkumi memuat, mengesahkan dan menghubungkan kod bytec. Pemuat kelas mengendalikan tugas-tugas ini.

Kami mempunyai artikel terperinci khusus mengenai pemuat kelas.

2.2. Kawasan Data Masa Larian

JVM menentukan pelbagai kawasan memori untuk melaksanakan program Java. Ini digunakan semasa runtime dan dikenali sebagai kawasan data run-time. Sebahagian dari kawasan ini dibuat pada permulaan JVM dan hancur ketika JVM keluar sementara yang lain dibuat ketika utas dibuat dan hancur ketika benang keluar.

Mari pertimbangkan bidang ini satu persatu:

Kawasan Kaedah

Pada asasnya, luas kaedah adalah serupa dengan kawasan penyimpanan kod yang disusun. Ia menyimpan struktur seperti kumpulan data run-time, medan dan kaedah tetap, kod kaedah dan pembina serta nama kelas yang memenuhi syarat. JVM menyimpan struktur ini untuk setiap kelas.

Kawasan kaedah, juga dikenali sebagai ruang generasi kekal (PermGen), dibuat semasa JVM dimulakan. Ingatan untuk kawasan ini tidak perlu bersambung. Semua utas JVM berkongsi kawasan memori ini.

Kawasan timbunan

JVM memperuntukkan memori untuk semua contoh kelas dan tatasusunan dari kawasan ini.

Pengumpul Sampah (GC) mengambil semula memori timbunan untuk objek. Pada dasarnya, GC mempunyai tiga fasa untuk mendapatkan semula memori dari objek iaitu. dua GC kecil dan satu GC utama.

Memori timbunan mempunyai tiga bahagian:

  • Eden Space - ia adalah bahagian ruang Generasi Muda. Semasa kita membuat objek, JVM memperuntukkan memori dari ruang ini
  • Survivor Space - ia juga merupakan bahagian ruang Generasi Muda. Survivor space mengandungi objek yang ada yang telah bertahan dari fasa GC kecil GC
  • Tenured Space - ini juga dikenali sebagai ruang Generasi Lama. Ia memegang benda yang masih hidup. Pada dasarnya, ambang ditetapkan untuk objek Generasi Muda dan apabila ambang ini dipenuhi, objek ini dipindahkan ke ruang tenur.

JVM membuat kawasan timbunan sebaik sahaja ia dimulakan. Semua utas JVM berkongsi kawasan ini. Ingatan untuk kawasan timbunan tidak perlu bersambung.

Kawasan tumpukan

Menyimpan data sebagai bingkai dan setiap bingkai menyimpan pemboleh ubah tempatan, hasil separa dan panggilan kaedah bersarang. JVM membuat kawasan timbunan setiap kali membuat utas baru. Kawasan ini adalah peribadi untuk setiap utas.

Setiap entri dalam timbunan disebut Stack Frame atau catatan Pengaktifan. Setiap bingkai mengandungi tiga bahagian:

  • Array Pembolehubah Tempatan - mengandungi semua pemboleh ubah tempatan dan parameter kaedah
  • Operand Stack - digunakan sebagai ruang kerja untuk menyimpan hasil pengiraan pertengahan
  • Data Bingkai - digunakan untuk menyimpan hasil separa, nilai kembali untuk kaedah, dan rujukan ke tabel Pengecualian yang memberikan informasi blok tangkapan yang sesuai sekiranya terdapat pengecualian

Memori untuk timbunan JVM tidak perlu bersambung.

Daftar PC

Setiap utas JVM mempunyai Daftar PC terpisah yang menyimpan alamat arahan yang sedang dijalankan. Sekiranya arahan yang sedang dijalankan adalah sebahagian daripada kaedah asli maka nilai ini tidak ditentukan.

Tumpukan kaedah asli

Kaedah asli adalah kaedah yang ditulis dalam bahasa selain Java.

JVM menyediakan keupayaan untuk memanggil kaedah asli ini. Tumpukan kaedah asli juga dikenal sebagai "tumpukan C". Mereka menyimpan maklumat kaedah asli. Setiap kali kaedah asli disusun ke dalam kod mesin, mereka biasanya menggunakan timbunan kaedah asli untuk mengetahui keadaannya.

JVM membuat timbunan ini setiap kali membuat utas baru. Oleh itu, benang JVM tidak berkongsi kawasan ini.

2.3. Enjin Pelaksanaan

Enjin pelaksanaan melaksanakan arahan menggunakan maklumat yang terdapat di kawasan memori. Ia mempunyai tiga bahagian:

Jurubahasa

Setelah pemuat kelas memuat dan mengesahkan bytecode, jurubahasa melaksanakan bytecode baris demi baris. Pelaksanaan ini agak perlahan. Kelemahan jurubahasa ialah apabila satu kaedah disebut berkali-kali, setiap kali penafsiran baru diperlukan.

Walau bagaimanapun, JVM menggunakan JIT Compiler untuk mengurangkan keburukan ini.

Penyusun Just-In-Time (JIT)

Penyusun JIT menyusun kod bytk kaedah yang sering disebut menjadi kod asli pada waktu run. Oleh itu ia bertanggungjawab untuk pengoptimuman program Java.

JVM secara automatik memantau kaedah mana yang dijalankan. Setelah kaedah memenuhi syarat untuk penyusunan JIT, ia dijadualkan untuk disusun menjadi kod mesin. Kaedah ini kemudian dikenali sebagai kaedah panas. Penyusunan ini ke dalam kod mesin berlaku pada utas JVM yang berasingan.

Akibatnya, ia tidak mengganggu pelaksanaan program semasa. Setelah disusun menjadi kod mesin, ia berjalan lebih pantas.

Pengutip Sampah

Java mengurus pengurusan memori menggunakan Garbage Collection. Ini adalah proses melihat memori timbunan, mengenal pasti objek mana yang digunakan dan yang tidak, dan akhirnya menghapus objek yang tidak digunakan.

GC adalah benang daemon. Ia boleh disebut dengan jelas menggunakan Sistem. kaedah gc () , bagaimanapun, ia tidak akan dijalankan dengan segera dan JVM memutuskan kapan akan memanggil GC.

2.4. Antaramuka Asli Java

Ia bertindak sebagai antara muka antara kod Java dan perpustakaan asli (C / C ++).

Terdapat situasi di mana Java saja tidak memenuhi keperluan aplikasi Anda, misalnya, menerapkan fitur yang bergantung pada platform.

Dalam kes tersebut, kita boleh menggunakan JNI untuk membolehkan kod berjalan di JVM untuk memanggil. Sebaliknya, ia membolehkan kaedah asli memanggil kod yang berjalan di JVM.

2.5. Perpustakaan Asli

Ini adalah perpustakaan khusus platform dan mengandungi pelaksanaan kaedah asli.

3. JRE

Java Runtime Environment (JRE) adalah sekumpulan komponen perisian yang digunakan untuk menjalankan aplikasi Java.

Komponen teras JRE merangkumi:

  • Pelaksanaan Java Virtual Machine (JVM)
  • Kelas yang diperlukan untuk menjalankan program Java
  • Fail Harta

Kami membincangkan JVM di bahagian di atas. Di sini kita akan memberi tumpuan kepada kelas teras dan fail sokongan.

3.1. Kelas Bootstrap

Kami akan menjumpai kelas bootstrap di bawah jre / lib / . Laluan ini juga dikenali sebagai bootstrap classpath. Ia termasuk:

  • Kelas waktu kerja di rt.jar
  • Kelas pengantarabangsaan di i18n.jar
  • Kelas penukaran watak dalam charsets.jar
  • Yang lain

Bootstrap ClassLoader memuatkan kelas-kelas ini semasa JVM dimulakan.

3.2. Kelas Sambungan

Kita dapat mencari kelas pelanjutan dalam jre / lib / extn / yang berfungsi sebagai direktori untuk sambungan ke platform Java. Laluan ini juga dikenali sebagai lanjutan classpath.

Ia mengandungi perpustakaan runtime JavaFX dalam jfxrt.jar dan data-tempat kejadian untuk java.text dan java.util pakej dalam localedata.jar . Pengguna juga dapat menambahkan balang khas ke dalam direktori ini.

3.3. Tetapan Harta

Platform Java menggunakan tetapan harta ini untuk mengekalkan konfigurasinya. Bergantung pada penggunaannya, mereka berada di folder yang berlainan di dalam / jre / lib / . Ini termasuk:

  • Konfigurasi kalendar dalam kalendar.properties
  • Log konfigurasi dalam logging.properties
  • Konfigurasi rangkaian di net.properties
  • Properti penyebaran di / jre / lib / deploy /
  • Hartanah pengurusan di / jre / lib / management /

3.4. Fail lain

Selain fail dan kelas yang disebutkan di atas, JRE juga mengandungi fail untuk perkara lain:

  • Pengurusan keselamatan di jre / lib / security
  • Direktori untuk meletakkan kelas sokongan untuk applet di jre / lib / applet
  • Fail berkaitan fon di jre / lib / font dan lain-lain

4. JDK

Java Development Kit (JDK) menyediakan lingkungan dan alat untuk mengembangkan, menyusun, melakukan debug, dan menjalankan program Java.

Komponen teras JDK merangkumi:

  • JRE
  • Alat Pembangunan

Kami membincangkan JRE di bahagian di atas.

Sekarang, kita akan memberi tumpuan kepada pelbagai alat pembangunan. Mari kita kategorikan alat ini berdasarkan penggunaannya:

4.1. Alat Asas

Alat-alat ini meletakkan dasar JDK dan digunakan untuk membuat dan membangun aplikasi Java. Di antara alat ini, kami dapat mencari utiliti untuk menyusun, menyahpepijat, mengarkibkan, menghasilkan Javadocs, dll.

Ia merangkumi:

  • javac - membaca definisi kelas dan antara muka dan menyusunnya ke dalam fail kelas
  • java - melancarkan aplikasi Java
  • javadoc - menghasilkan halaman HTML dokumentasi API dari fail sumber Java
  • apt - mencari dan melaksanakan pemproses anotasi berdasarkan anotasi yang terdapat dalam kumpulan fail sumber yang ditentukan
  • appletviewer - membolehkan kita menjalankan applet Java tanpa penyemak imbas web
  • jar - bungkus applet Java atau aplikasi ke dalam satu arkib
  • jdb - alat debug baris perintah yang digunakan untuk mencari dan memperbaiki bug dalam aplikasi Java
  • javah - menghasilkan header C dan fail sumber dari kelas Java
  • javap - membongkar fail kelas dan memaparkan maklumat mengenai bidang, konstruktor, dan kaedah yang terdapat dalam fail kelas
  • extcheck - mengesan konflik versi antara fail Java Archive (JAR) dan fail JAR sambungan yang dipasang pada masa ini

4.2. Alat Keselamatan

Ini termasuk alat pengurusan kunci dan sijil yang digunakan untuk memanipulasi Java Keystores.

Java Keystore adalah wadah untuk sijil kebenaran atau sijil kunci awam. Akibatnya, ia sering digunakan oleh aplikasi berbasis Java untuk enkripsi, pengesahan, dan melayani melalui HTTPS.

Juga, mereka membantu mengatur kebijakan keamanan pada sistem kami dan membuat aplikasi yang dapat berfungsi dalam ruang lingkup kebijakan ini di lingkungan produksi. Ini termasuk:

  • keytool - membantu mengurus entri kedai kunci, iaitu, kunci kriptografi dan sijil
  • jarsigner - menghasilkan fail JAR yang ditandatangani secara digital dengan menggunakan maklumat kedai kunci
  • policytool - membolehkan kami menguruskan fail konfigurasi dasar luaran yang menentukan dasar keselamatan pemasangan

Beberapa alat keselamatan juga membantu menguruskan tiket Kerberos.

Kerberos adalah protokol pengesahan rangkaian.

Ia berfungsi berdasarkan tiket untuk membolehkan nod berkomunikasi melalui rangkaian yang tidak selamat untuk membuktikan identiti mereka satu sama lain dengan cara yang selamat:

  • kinit - digunakan untuk mendapatkan dan menyimpan cache tiket pemberian tiket Kerberos
  • ktab - menguruskan nama prinsip dan pasangan kunci dalam jadual kunci
  • klist - memaparkan entri dalam cache kelayakan tempatan dan jadual utama

4.3. Alat Pengantarabangsaan

Pengantarabangsaan adalah proses merancang aplikasi sehingga dapat disesuaikan dengan pelbagai bahasa dan wilayah tanpa perubahan kejuruteraan.

Untuk tujuan ini, JDK membawa asli2ascii. Alat ini menukar fail dengan watak yang disokong oleh JRE ke fail yang dikodkan dalam ASCII atau Unicode lolos.

4.4. Alat Permintaan Kaedah Jauh (RMI)

Alat RMI membolehkan komunikasi jarak jauh antara aplikasi Java sehingga memberikan ruang untuk pengembangan aplikasi yang diedarkan.

RMI membolehkan objek berjalan dalam satu JVM untuk menggunakan kaedah pada objek yang berjalan di JVM lain. Alat ini merangkumi:

  • rmic - menghasilkan kelas rintisan, kerangka, dan tali leher untuk objek terpencil menggunakan Java Remote Method Protocol (JRMP) atau Internet Inter-Orb Protocol (IIOP)
  • rmiregistry - membuat dan memulakan pendaftaran objek jauh
  • rmid - s menghidupkan daemon sistem pengaktifan. Ini membolehkan objek didaftarkan dan diaktifkan dalam Mesin Maya Java
  • serialver - mengembalikan UID versi bersiri untuk kelas yang ditentukan

4.5. Java IDL dan Alat RMI-IIOP

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

Alat-alat ini membolehkan aplikasi web Java yang diedarkan untuk menjalankan operasi pada perkhidmatan rangkaian jarak jauh menggunakan Kumpulan Pengurusan Objek standard industri (OMG) - IDL.

Begitu juga, kita boleh menggunakan Internet InterORB Protocol (IIOP).

RMI-IIOP, iaitu RMI over IIOP membolehkan pengaturcaraan pelayan dan aplikasi CORBA melalui API RMI. Oleh itu membolehkan hubungan antara dua aplikasi ditulis dalam mana-mana bahasa yang sesuai dengan CORBA melalui Internet InterORB Protocol (IIOP).

Alat ini merangkumi:

  • tnameserv - Perkhidmatan Penamaan sementara yang menyediakan direktori struktur pokok untuk rujukan objek
  • idlj - Penyusun IDL-ke-Java untuk menghasilkan pengikatan Java untuk fail IDL yang ditentukan
  • orbd - membolehkan klien mencari dan menggunakan objek berterusan pada pelayan dalam persekitaran CORBA secara telus
  • servertool - menyediakan antara muka baris perintah untuk mendaftar atau membatalkan pendaftaran pelayan berterusan dengan ORB Daemon ( orbd ), memulakan dan mematikan pelayan berterusan yang berdaftar dengan ORB Daemon, dan lain-lain

4.6. Alat Penyebaran Java

Alat ini membantu dalam menyebarkan aplikasi dan applet Java di web. Ia merangkumi:

  • pack200 - mengubah fail JAR menjadi fail pack200 menggunakan pemampat Java gzip
  • unpack200 - mengubah fail pack200 menjadi fail JAR

4.7. Alat Pemalam Java

JDK menyediakan kami dengan htmlconverter. Selanjutnya, ia digunakan bersama dengan Java Plug-in.

Di satu pihak, Java Plug-in menjalin hubungan antara penyemak imbas popular dan platform Java. Hasil daripada sambungan ini, applet di laman web dapat berjalan dalam penyemak imbas.

Sebaliknya, htmlconverter adalah utiliti untuk menukar halaman HTML yang mengandungi applet ke format untuk Java Plug-in.

4.8. Alat Mula Web Java

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

Alat ini membolehkan kami memuat turun dan melancarkan aplikasi Java dengan satu klik dari penyemak imbas. Oleh itu, tidak perlu menjalankan proses pemasangan.

4.9. Alat Pemantauan dan Pengurusan

Ini adalah alat hebat yang dapat kita gunakan untuk memantau prestasi JVM dan penggunaan sumber. Berikut adalah beberapa perkara berikut:

  • jconsole - menyediakan konsol grafik yang membolehkan anda memantau dan mengurus aplikasi Java
  • jps - menyenaraikan JVM yang diinstrumentasi pada sistem sasaran
  • jstat - memantau statistik JVM
  • jstatd - memantau penciptaan dan penamatan JVM instrumen

4.10. Alat Penyelesaian Masalah

Ini adalah alat eksperimen yang dapat kami manfaatkan untuk menyelesaikan masalah tugas :

  • info - menghasilkan maklumat konfigurasi untuk proses Java yang ditentukan
  • jmap - mencetak peta memori objek bersama atau timbunan butiran memori proses yang ditentukan
  • jsadebugd - melekat pada proses Java dan bertindak sebagai pelayan debug
  • jstack - mencetak jejak tumpukan Java dari benang Java untuk proses Java tertentu

5. Kesimpulan

Dalam artikel ini, kami mengenal pasti bahawa perbezaan asas antara JVM, JRE, dan JDK terletak pada penggunaannya.

Pertama, kami menerangkan bagaimana JVM adalah mesin pengkomputeran abstrak yang benar-benar melaksanakan bytecode Java.

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

Dan akhirnya, kami memahami bagaimana mengembangkan aplikasi Java, kami menggunakan JDK.

Kami juga meluangkan masa untuk menggali alat dan konsep asas komponen ini.