Mesin Virtual Java - Area Data Runtime
Spesifikasi JVM mendefinisikan area data run-time tertentu yang diperlukan selama eksekusi program. Beberapa di antaranya dibuat saat JVM dijalankan. Lainnya bersifat lokal untuk utas dan dibuat hanya ketika utas dibuat (dan dihancurkan ketika utas dihancurkan). Ini tercantum di bawah -
PC (Penghitung Program) Daftar
Ini bersifat lokal untuk setiap utas dan berisi alamat instruksi JVM yang sedang dijalankan utas.
Tumpukan
Ini bersifat lokal untuk setiap utas dan menyimpan parameter, variabel lokal, dan alamat pengembalian selama panggilan metode. Kesalahan StackOverflow dapat terjadi jika utas menuntut lebih banyak ruang tumpukan daripada yang diizinkan. Jika tumpukan dapat diperluas secara dinamis, itu masih dapat memunculkan OutOfMemoryError.
Tumpukan
Itu dibagikan di antara semua utas dan berisi objek, metadata kelas, array, dll., Yang dibuat selama waktu proses. Itu dibuat ketika JVM dimulai dan dihancurkan ketika JVM dimatikan. Anda dapat mengontrol jumlah tumpukan yang diminta JVM Anda dari OS menggunakan tanda tertentu (lebih lanjut tentang ini nanti). Perhatian harus diberikan untuk tidak menuntut terlalu sedikit atau terlalu banyak memori, karena memiliki implikasi kinerja yang penting. Selanjutnya, GC mengelola ruang ini dan terus menerus membuang benda mati untuk membebaskan ruang.
Metode Area
Area run-time ini umum untuk semua utas dan dibuat saat JVM dijalankan. Ini menyimpan struktur per kelas seperti kumpulan konstan (lebih lanjut tentang ini nanti), kode untuk konstruktor dan metode, data metode, dll. JLS tidak menentukan apakah area ini perlu dikumpulkan sampah, dan karenanya, implementasi dari JVM dapat memilih untuk mengabaikan GC. Lebih lanjut, ini mungkin atau mungkin tidak berkembang sesuai kebutuhan aplikasi. JLS tidak mengamanatkan apa pun terkait hal ini.
Pangkalan Konstan Waktu
JVM mempertahankan struktur data per kelas / per jenis yang bertindak sebagai tabel simbol (salah satu dari banyak perannya) saat menghubungkan kelas yang dimuat.
Tumpukan Metode Asli
Saat utas memanggil metode asli, utas memasuki dunia baru di mana struktur dan batasan keamanan mesin virtual Java tidak lagi menghalangi kebebasannya. Metode asli kemungkinan dapat mengakses area data runtime dari mesin virtual (bergantung pada antarmuka metode asli), tetapi juga dapat melakukan hal lain yang diinginkannya.
Pengumpulan Sampah
JVM mengelola seluruh siklus hidup objek di Java. Setelah sebuah objek dibuat, pengembang tidak perlu mengkhawatirkannya lagi. Jika objek mati (yaitu, tidak ada referensi lagi), objek dikeluarkan dari heap oleh GC menggunakan salah satu dari banyak algoritme - GC serial, CMS, G1, dll.
Selama proses GC, objek dipindahkan ke memori. Oleh karena itu, objek tersebut tidak dapat digunakan selama proses berlangsung. Seluruh aplikasi harus dihentikan selama proses berlangsung. Jeda seperti itu disebut jeda 'stop-the-world' dan merupakan beban yang sangat besar. Algoritme GC bertujuan untuk mengurangi waktu ini. Kami akan membahas hal ini dengan sangat rinci di bab-bab berikut.
Berkat GC, kebocoran memori sangat jarang terjadi di Java, tetapi bisa terjadi. Kita akan melihat di bab selanjutnya cara membuat kebocoran memori di Java.