Apa itu JVM? Memperkenalkan Mesin Virtual Java

Java Virtual Machine adalah program yang bertujuan untuk menjalankan program lain. Ini adalah ide sederhana yang juga merupakan salah satu contoh terbaik coding kung fu kami . JVM mengganggu status quo pada masanya, dan terus mendukung inovasi pemrograman hingga saat ini.

Untuk apa JVM digunakan

JVM memiliki dua fungsi utama: untuk memungkinkan program Java berjalan pada perangkat atau sistem operasi apa pun (dikenal sebagai prinsip "Tulis sekali, jalankan di mana saja"), dan untuk mengelola dan mengoptimalkan memori program. Ketika Java dirilis pada tahun 1995, semua program komputer ditulis ke sistem operasi tertentu, dan memori program dikelola oleh pengembang perangkat lunak. Jadi JVM adalah wahyu.

JavaWorld /

Memiliki definisi teknis untuk JVM itu berguna, dan ada juga cara sehari-hari para pengembang perangkat lunak memikirkannya. Mari kita hancurkan:

  • Definisi teknis : JVM adalah spesifikasi untuk program perangkat lunak yang menjalankan kode dan menyediakan lingkungan runtime untuk kode tersebut.
  • Definisi Sehari-hari : JVM adalah cara kami menjalankan program Java. Kami mengkonfigurasi pengaturan JVM dan kemudian mengandalkannya untuk mengelola sumber daya program selama eksekusi.

Saat developer berbicara tentang JVM, yang kami maksud biasanya adalah proses yang berjalan di mesin, terutama server, yang mewakili dan mengontrol penggunaan resource untuk aplikasi Java. Bandingkan ini dengan spesifikasi JVM , yang menjelaskan persyaratan untuk membangun program yang melakukan tugas ini.

Siapa yang mengembangkan dan memelihara JVM?

JVM digunakan secara luas, banyak digunakan, dan dikelola oleh beberapa programmer yang sangat cerdas, baik perusahaan maupun open source. Proyek OpenJDK adalah keturunan dari keputusan Sun Microsystems untuk menggunakan Java open-source. OpenJDK terus berlanjut melalui penatalayanan Oracle atas Java, dengan banyak pekerjaan berat akhir-akhir ini dilakukan oleh para insinyur Oracle.

Manajemen memori di JVM

Interaksi paling umum dengan JVM yang sedang berjalan adalah memeriksa penggunaan memori di heap dan stack. Penyesuaian yang paling umum adalah menyetel pengaturan memori JVM.

Pengumpulan sampah

Sebelum Java, semua memori program dikelola oleh programmer. Di Java, memori program dikelola oleh JVM. JVM mengelola memori melalui proses yang disebut pengumpulan sampah , yang secara terus menerus mengidentifikasi dan menghilangkan memori yang tidak digunakan dalam program Java. Pengumpulan sampah terjadi di dalam JVM yang sedang berjalan.

Pada masa-masa awal, Java mendapat banyak kritik karena tidak "dekat dengan metal" seperti C ++, dan karena itu tidak secepat itu. Proses pengumpulan sampah sangat kontroversial. Sejak itu, berbagai algoritme dan pendekatan telah diusulkan dan digunakan untuk pengumpulan sampah. Dengan pengembangan dan pengoptimalan yang konsisten, pengumpulan sampah telah meningkat pesat.

Apa artinya 'dekat dengan logam'?

Ketika programmer mengatakan bahasa pemrograman atau platform "mendekati logam," yang kami maksud adalah pengembang dapat secara terprogram (dengan menulis kode) mengelola memori sistem operasi. Secara teori, programmer dapat memeras lebih banyak kinerja dari program kami dengan menetapkan berapa banyak yang digunakan dan kapan harus membuangnya. Dalam kebanyakan kasus, mendelegasikan manajemen memori ke proses yang sangat halus seperti JVM menghasilkan kinerja yang lebih baik dan lebih sedikit kesalahan daripada melakukannya sendiri.

JVM dalam tiga bagian

Bisa dikatakan ada tiga aspek dalam JVM: spesifikasi, implementasi dan contoh. Mari kita pertimbangkan masing-masing.

1. Spesifikasi JVM

Pertama, JVM adalah spesifikasi perangkat lunak. Dengan cara yang agak melingkar, spesifikasi JVM menyoroti bahwa detail implementasinya tidak ditentukan dalam spesifikasi, untuk memungkinkan kreativitas maksimum dalam realisasinya:

"Untuk mengimplementasikan mesin virtual Java dengan benar, Anda hanya perlu dapat membaca classformat file dan melakukan operasi yang ditentukan di dalamnya dengan benar."

JS Bach pernah mendeskripsikan pembuatan musik dengan cara yang sama:

"Yang harus Anda lakukan adalah menyentuh tombol yang tepat di saat yang tepat."

Jadi, yang harus JVM lakukan hanyalah menjalankan program Java dengan benar. Kedengarannya sederhana, bahkan mungkin terlihat sederhana dari luar, tetapi ini merupakan pekerjaan yang sangat besar, terutama mengingat kekuatan dan fleksibilitas bahasa Jawa.

JVM sebagai mesin virtual

JVM adalah mesin virtual yang menjalankan file kelas Java dengan cara portabel. Menjadi mesin virtual berarti JVM adalah abstraksi dari mesin sebenarnya yang mendasari - seperti server tempat program Anda berjalan. Terlepas dari sistem operasi atau perangkat keras apa yang sebenarnya ada, JVM menciptakan lingkungan yang dapat diprediksi untuk menjalankan program di dalamnya. Tidak seperti mesin virtual yang sebenarnya, JVM tidak membuat sistem operasi virtual. Akan lebih akurat untuk menggambarkan JVM sebagai lingkungan runtime terkelola , atau mesin virtual proses .

2. Implementasi JVM

Penerapan spesifikasi JVM menghasilkan program perangkat lunak yang sebenarnya, yang merupakan implementasi JVM. Faktanya, ada banyak implementasi JVM, baik open source maupun proprietary. HotSpot JVM OpenJDK adalah implementasi referensi, dan tetap menjadi salah satu basis kode yang paling benar-benar dicoba dan diuji di dunia. HotSpot juga merupakan JVM yang paling umum digunakan.

Hampir semua JVM berlisensi dibuat sebagai cabang dari OpenJDK dan HotSpot JVM, termasuk JDK berlisensi Oracle. Pengembang yang membuat garpu berlisensi dari OpenJDK sering kali dimotivasi oleh keinginan untuk menambahkan peningkatan kinerja khusus OS. Biasanya, Anda mengunduh dan menginstal JVM sebagai bagian bundel dari Java Runtime Environment (JRE).

3. Sebuah instance JVM

Setelah spesifikasi JVM diimplementasikan dan dirilis sebagai produk perangkat lunak, Anda dapat mengunduh dan menjalankannya sebagai program. Program yang diunduh itu adalah instance (atau versi yang dibuat) dari JVM.

Sering kali, saat developer berbicara tentang "JVM", kami mengacu pada instance JVM yang berjalan di lingkungan pengembangan atau produksi perangkat lunak. Anda mungkin berkata, "Hai Anand, berapa banyak memori yang digunakan JVM di server itu?" atau, "Saya tidak percaya saya membuat panggilan melingkar dan kesalahan stack overflow membuat JVM saya rusak. Benar-benar kesalahan pemula!"

Apa spesifikasi perangkat lunak?

Sebuah spesifikasi perangkat lunak (atau spec) adalah dokumen desain terbaca-manusia yang menggambarkan bagaimana sebuah sistem perangkat lunak harus beroperasi. Tujuan dari spesifikasi adalah untuk membuat deskripsi dan persyaratan yang jelas bagi teknisi untuk membuat kode.

Memuat dan menjalankan file kelas di JVM

Kami telah berbicara tentang peran JVM dalam menjalankan aplikasi Java, tetapi bagaimana JVM menjalankan fungsinya? Untuk menjalankan aplikasi Java, JVM bergantung pada loader kelas Java dan mesin eksekusi Java.

Loader kelas Java di JVM

Semua yang ada di Java adalah kelas, dan semua aplikasi Java dibangun dari kelas. Sebuah aplikasi dapat terdiri dari satu kelas atau ribuan. Untuk menjalankan aplikasi Java, JVM harus memuat file .class yang dikompilasi ke dalam konteks, seperti server, tempat file tersebut dapat diakses. JVM bergantung pada pemuat kelasnya untuk menjalankan fungsi ini.

Pemuat kelas Java adalah bagian dari JVM yang memuat kelas ke dalam memori dan membuatnya tersedia untuk dieksekusi. Pemuat kelas menggunakan teknik seperti pemuatan lambat dan penyimpanan dalam cache untuk membuat pemuatan kelas seefisien mungkin. Yang mengatakan, pemuatan kelas bukanlah asah otak epik yang (katakanlah) manajemen memori runtime portabel, jadi tekniknya relatif sederhana.

Setiap Mesin Virtual Java menyertakan pemuat kelas. Spesifikasi JVM menjelaskan metode standar untuk membuat kueri dan memanipulasi pemuat kelas pada waktu proses, tetapi implementasi JVM bertanggung jawab untuk memenuhi kemampuan ini. Dari perspektif pengembang, mekanisme pemuat kelas yang mendasarinya biasanya berupa kotak hitam.

Mesin eksekusi di JVM

Setelah pemuat kelas menyelesaikan tugasnya memuat kelas, JVM mulai menjalankan kode di setiap kelas. Mesin eksekusi adalah komponen JVM yang menangani fungsi ini. Mesin eksekusi sangat penting untuk menjalankan JVM. Faktanya, untuk semua tujuan praktis, ini adalah instance JVM.

Kode pelaksana melibatkan pengelolaan akses ke sumber daya sistem. Mesin eksekusi JVM berdiri di antara program yang sedang berjalan - dengan tuntutannya akan file, jaringan dan sumber daya memori - dan sistem operasi, yang memasok sumber daya tersebut.

Bagaimana mesin eksekusi mengelola sumber daya sistem

Sumber daya sistem dapat dibagi menjadi dua kategori besar: memori dan yang lainnya.

Ingatlah bahwa JVM bertanggung jawab untuk membuang memori yang tidak digunakan, dan pengumpulan sampah adalah mekanisme yang melakukan pembuangan tersebut. JVM juga bertanggung jawab untuk mengalokasikan dan memelihara struktur referensial yang diterima begitu saja oleh pengembang. Sebagai contoh, mesin eksekusi JVM bertanggung jawab untuk mengambil sesuatu seperti newkata kunci di Java, dan mengubahnya menjadi permintaan khusus OS untuk alokasi memori.

Di luar memori, mesin eksekusi mengelola sumber daya untuk akses sistem file dan jaringan I / O. Karena JVM dapat dioperasikan di seluruh sistem operasi, ini bukan tugas yang berarti. Selain kebutuhan sumber daya setiap aplikasi, mesin eksekusi harus responsif terhadap setiap lingkungan OS. Begitulah cara JVM dapat menangani permintaan di alam liar.

Evolusi JVM: Dulu, sekarang, masa depan

Pada tahun 1995, JVM memperkenalkan dua konsep revolusioner yang telah menjadi tarif standar untuk pengembangan perangkat lunak modern: "Tulis sekali, jalankan di mana saja" dan manajemen memori otomatis. Interoperabilitas perangkat lunak adalah konsep yang berani pada saat itu, tetapi hanya sedikit pengembang saat ini yang akan berpikir dua kali tentang itu. Demikian pula, ketika para insinyur teknik kami harus mengelola sendiri memori program, generasi saya tumbuh dengan pengumpulan sampah.

Kita dapat mengatakan bahwa James Gosling dan Brendan Eich menemukan pemrograman modern, tetapi ribuan orang lainnya telah menyempurnakan dan membangun ide-ide mereka selama beberapa dekade berikutnya. Sedangkan Java Virtual Machine pada awalnya hanya untuk Java, saat ini telah berkembang untuk mendukung banyak bahasa skrip dan pemrograman, termasuk Scala, Groovy, dan Kotlin. Ke depan, sulit untuk melihat masa depan di mana JVM bukan bagian penting dari lanskap pembangunan.

Semua tentang JVM

  • Penantang Java: Perilaku utas di JVM
  • Penantang Java: Metode overloading di JVM
  • Di dalam optimasi kinerja JVM
  • Dasar-dasar bytecode: Bagaimana JVM menangani bytecode
  • Pengecualian Java: Bagaimana JVM menangani pengecualian
  • Memperkenalkan mesin virtual Java yang ramping dan berarti

Artikel ini, "Apa itu JVM? Memperkenalkan Mesin Virtual Java" awalnya diterbitkan oleh JavaWorld.