Apakah JVM itu? Memperkenalkan Mesin Maya Java

Java Virtual Machine adalah program yang bertujuan untuk melaksanakan program lain. Ini adalah idea mudah yang juga menjadi salah satu contoh pengkodan kung fu terbesar kami . JVM mengecewakan status quo pada masanya, dan terus menyokong inovasi pengaturcaraan hari ini.

Untuk apa JVM digunakan

JVM mempunyai dua fungsi utama: untuk membolehkan program Java berjalan pada mana-mana peranti atau sistem operasi (dikenali sebagai prinsip "Tulis sekali, jalankan di mana sahaja"), dan untuk mengurus dan mengoptimumkan memori program. Ketika Java dirilis pada tahun 1995, semua program komputer ditulis ke sistem operasi tertentu, dan memori program dikelola oleh pengembang perisian. Jadi JVM adalah wahyu.

JavaWorld /

Mempunyai definisi teknikal untuk JVM berguna, dan ada juga cara seharian yang difikirkan oleh pembangun perisian. Mari pecahkan:

  • Definisi teknikal : JVM adalah spesifikasi untuk program perisian yang melaksanakan kod dan menyediakan persekitaran waktu proses untuk kod tersebut.
  • Definisi Setiap Hari : JVM adalah bagaimana kita menjalankan program Java kita. Kami mengkonfigurasi tetapan JVM dan kemudian bergantung padanya untuk menguruskan sumber program semasa pelaksanaan.

Apabila pembangun membincangkan JVM, biasanya kami bermaksud proses berjalan pada mesin, terutama pelayan, yang mewakili dan mengawal penggunaan sumber daya untuk aplikasi Java. Berbeza dengan spesifikasi JVM , yang menerangkan keperluan untuk membina program yang melaksanakan tugas-tugas ini.

Siapa yang membangun dan mengekalkan JVM?

JVM digunakan secara meluas, banyak digunakan, dan dikendalikan oleh beberapa pengaturcara yang sangat terang, baik sumber korporat dan terbuka. Projek OpenJDK adalah keturunan keputusan Sun Microsystems untuk Java sumber terbuka. OpenJDK telah meneruskan pengawasan Oracle di Jawa, dengan banyak pengangkatan berat hari ini dilakukan oleh jurutera Oracle.

Pengurusan memori dalam JVM

Interaksi yang paling biasa dengan JVM yang berjalan adalah memeriksa penggunaan memori di timbunan dan timbunan. Penyesuaian yang paling biasa adalah menala tetapan memori JVM.

Kutipan sampah

Sebelum Java, semua memori program dikendalikan oleh pengaturcara. Di Java, memori program dikendalikan oleh JVM. JVM menguruskan memori melalui proses yang disebut pengumpulan sampah , yang secara berterusan mengenal pasti dan menghilangkan memori yang tidak digunakan dalam program Java. Pengumpulan sampah berlaku di dalam JVM yang sedang berjalan.

Pada masa awal, Java mendapat banyak kritikan karena tidak "dekat dengan logam" seperti C ++, dan oleh karena itu tidak secepat. Proses pengumpulan sampah sangat kontroversial. Sejak itu, pelbagai algoritma dan pendekatan telah dicadangkan dan digunakan untuk pengumpulan sampah. Dengan pengembangan dan pengoptimuman yang konsisten, pengumpulan sampah telah bertambah baik.

Apa maksud 'dekat dengan logam'?

Apabila pengaturcara mengatakan bahasa atau platform pengaturcaraan adalah "dekat dengan logam", kami bermaksud pembangun dapat memprogram (dengan menulis kod) secara teratur menguruskan memori sistem operasi. Secara teori, pengaturcara dapat memperoleh lebih banyak prestasi daripada program kami dengan menetapkan berapa banyak yang digunakan dan kapan untuk membuangnya. Dalam kebanyakan kes, mendelegasikan pengurusan memori ke proses yang sangat halus seperti JVM menghasilkan prestasi yang lebih baik dan lebih sedikit kesalahan daripada melakukannya sendiri.

JVM dalam tiga bahagian

Boleh dikatakan ada tiga aspek untuk JVM: spesifikasi, pelaksanaan dan contoh. Mari kita pertimbangkan setiap perkara ini.

1. Spesifikasi JVM

Pertama, JVM adalah spesifikasi perisian. Dengan cara yang agak bulat, spesifikasi JVM menekankan bahawa perincian pelaksanaannya tidak ditentukan dalam spesifikasi, untuk memungkinkan kreativiti maksimum dalam merealisasikannya:

"Untuk mengimplementasikan mesin maya Java dengan betul, anda hanya perlu membaca classformat fail dan melakukan operasi yang ditentukan di dalamnya dengan betul."

JS Bach pernah menggambarkan mencipta muzik dengan cara yang serupa:

"Yang harus anda lakukan hanyalah menyentuh kekunci kanan pada waktu yang tepat."

Jadi, semua yang harus dilakukan JVM adalah menjalankan program Java dengan betul. Kedengarannya sederhana, bahkan mungkin kelihatan sederhana dari luar, tetapi ini merupakan usaha besar, terutama kerana kekuatan dan kelenturan bahasa Jawa.

JVM sebagai mesin maya

JVM adalah mesin maya yang menjalankan fail kelas Java dengan cara mudah alih. Menjadi mesin maya bermaksud JVM adalah pengabaian mesin yang sebenarnya, seperti pelayan yang dijalankan oleh program anda. Tidak kira apa sistem operasi atau perkakasan yang sebenarnya ada, JVM mewujudkan persekitaran yang dapat diramalkan agar program dapat dijalankan. Tidak seperti mesin maya yang sebenarnya, JVM tidak membuat sistem operasi maya. Akan lebih tepat untuk menggambarkan JVM sebagai persekitaran runtime yang dikendalikan , atau mesin virtual proses .

2. Pelaksanaan JVM

Melaksanakan spesifikasi JVM menghasilkan program perisian yang sebenarnya, yang merupakan implementasi JVM. Sebenarnya, terdapat banyak pelaksanaan JVM, baik sumber terbuka dan proprietari. HotSpot JVM OpenJDK adalah pelaksanaan rujukan, dan tetap menjadi salah satu pangkalan data yang paling banyak dicuba dan diuji di dunia. HotSpot juga merupakan JVM yang paling biasa digunakan.

Hampir semua JVM berlesen dibuat sebagai garpu dari OpenJDK dan HotSpot JVM, termasuk JDK berlesen Oracle. Pembangun yang mencipta garpu berlesen dari OpenJDK sering didorong oleh keinginan untuk menambah peningkatan prestasi khusus OS. Biasanya, anda memuat turun dan memasang JVM sebagai sebahagian daripada Java Runtime Environment (JRE).

3. Contoh JVM

Setelah spesifikasi JVM dilaksanakan dan dikeluarkan sebagai produk perisian, anda boleh memuat turun dan menjalankannya sebagai program. Program yang dimuat turun adalah contoh (atau versi instantiated) dari JVM.

Selalunya, ketika pembangun membicarakan "JVM", kita merujuk kepada contoh JVM yang berjalan di persekitaran pengembangan atau pengeluaran perisian. Anda mungkin berkata, "Hai Anand, berapa banyak memori yang digunakan JVM pada pelayan itu?" atau, "Saya tidak percaya bahawa saya membuat panggilan pekeliling dan ralat limpahan timbunan merosakkan JVM saya. Apa kesilapan pemula!"

Apakah spesifikasi perisian?

A spesifikasi perisian (atau spec) adalah dokumen reka bentuk yang boleh dibaca manusia yang menerangkan bagaimana sistem perisian harus beroperasi. Tujuan spesifikasi adalah untuk membuat penerangan dan keperluan yang jelas bagi jurutera untuk membuat kod.

Memuat dan melaksanakan fail kelas di JVM

Kami telah membincangkan peranan JVM dalam menjalankan aplikasi Java, tetapi bagaimana ia menjalankan fungsinya? Untuk menjalankan aplikasi Java, JVM bergantung pada loader kelas Java dan mesin eksekusi Java.

Pemuat kelas Java di JVM

Semua yang ada di Java adalah kelas, dan semua aplikasi Java dibuat dari kelas. Permohonan boleh terdiri dari satu kelas atau ribuan. Untuk menjalankan aplikasi Java, JVM harus memuat file .class yang dikompilasi ke dalam konteks, seperti pelayan, di mana mereka dapat diakses. JVM bergantung pada pemuat kelasnya untuk melaksanakan fungsi ini.

Pemuat kelas Java adalah bahagian dari JVM yang memuat kelas ke dalam memori dan menjadikannya tersedia untuk pelaksanaan. Pemuat kelas menggunakan teknik seperti pemuatan malas dan caching untuk menjadikan pemuatan kelas seefisien mungkin. Yang mengatakan, pemuatan kelas bukanlah penggoda otak epik yang (katakan) pengurusan memori runtime mudah alih, jadi tekniknya relatif mudah.

Setiap Mesin Maya Java termasuk pemuat kelas. Spesifikasi JVM menerangkan kaedah standard untuk membuat pertanyaan dan memanipulasi pemuat kelas pada waktu runtime, tetapi pelaksanaan JVM bertanggung jawab untuk memenuhi kemampuan ini. Dari perspektif pemaju, mekanisme pemuat kelas yang mendasari biasanya kotak hitam.

Enjin pelaksanaan di JVM

Setelah pemuat kelas menyelesaikan tugas memuat kelas, JVM mula melaksanakan kod di setiap kelas. The enjin pelaksanaan adalah komponen JVM yang mengendalikan fungsi ini. Enjin pelaksanaan sangat penting untuk JVM yang berjalan. Sebenarnya, untuk semua tujuan praktikal, ini adalah contoh JVM.

Melaksanakan kod melibatkan menguruskan akses ke sumber sistem. Mesin pelaksanaan JVM berada di antara program yang sedang berjalan - dengan tuntutannya untuk sumber fail, rangkaian dan memori - dan sistem operasi, yang membekalkan sumber tersebut.

Bagaimana enjin pelaksanaan menguruskan sumber sistem

Sumber sistem boleh dibahagikan kepada dua kategori yang luas: memori dan semua yang lain.

Ingatlah bahawa JVM bertanggungjawab untuk membuang memori yang tidak digunakan, dan pengumpulan sampah adalah mekanisme yang melakukan pembuangan itu. JVM juga bertanggungjawab untuk memperuntukkan dan mengekalkan struktur rujukan yang dianggap wajar oleh pemaju. Sebagai contoh, mesin pelaksanaan JVM bertanggung jawab untuk mengambil sesuatu seperti newkata kunci di Java, dan mengubahnya menjadi permintaan khusus OS untuk peruntukan memori.

Di luar memori, mesin pelaksanaan menguruskan sumber untuk akses sistem fail dan I / O rangkaian. Oleh kerana JVM boleh dikendalikan di seluruh sistem operasi, ini bukan tugas yang mustahak. Sebagai tambahan kepada keperluan sumber daya setiap aplikasi, mesin pelaksanaan harus responsif terhadap setiap lingkungan OS. Begitulah cara JVM dapat menangani tuntutan secara liar.

Evolusi JVM: Masa lalu, masa kini, masa depan

Pada tahun 1995, JVM memperkenalkan dua konsep revolusioner yang sejak itu menjadi tarif standard untuk pengembangan perisian moden: "Tulis sekali, jalankan di mana sahaja" dan pengurusan memori automatik. Interoperabiliti perisian adalah konsep yang berani pada masa itu, tetapi sebilangan kecil pembangun hari ini akan memikirkannya dua kali. Begitu juga, walaupun leluhur kejuruteraan kita harus menguruskan memori program sendiri, generasi saya dibesarkan dengan pengumpulan sampah.

Kita boleh mengatakan bahawa James Gosling dan Brendan Eich mencipta pengaturcaraan moden, tetapi ribuan yang lain telah menyempurnakan dan membina idea mereka selama beberapa dekad berikutnya. Walaupun Java Virtual Machine awalnya hanya untuk Java, hari ini telah berkembang untuk mendukung banyak bahasa skrip dan pemrograman, termasuk Scala, Groovy, dan Kotlin. Ke depan, sukar untuk melihat masa depan di mana JVM bukanlah bahagian yang menonjol dalam landskap pembangunan.

Semua mengenai JVM

  • Pencabar Java: Tingkah laku benang dalam JVM
  • Pencabar Java: Kaedah overloading di JVM
  • Di dalam pengoptimuman prestasi JVM
  • Asas Bytecode: Bagaimana JVM mengendalikan bytecode
  • Pengecualian Java: Bagaimana JVM menangani pengecualian
  • Memperkenalkan mesin maya Java yang ramping dan sederhana

Cerita ini, "Apa JVM? Memperkenalkan Java Virtual Machine" pada awalnya diterbitkan oleh JavaWorld.