1. Ikhtisar
Mesin virtual Java akan membagi memori yang dikelola menjadi beberapa area data yang berbeda dalam proses melaksanakan program Java. Memori yang dikelola oleh mesin virtual Java akan mencakup area data runtime berikut, seperti yang ditunjukkan pada gambar di bawah ini:
Berikut ini dijelaskan di setiap area.
Kedua, Area Data <BR /> Penghitung Program <BR /> Penghitung Program dapat dianggap sebagai indikator nomor baris kode byte yang dijalankan oleh utas saat ini. Dalam model konsep mesin virtual, pekerjaan juru bahasa kode kerja adalah untuk memilih instruksi kode byte yang perlu dieksekusi dengan mengubah nilai -nilai penghitung program. Pemulihan utas dan fungsi dasar lainnya semua harus mengandalkan konter ini untuk menyelesaikannya.
Dalam multi -utusan, untuk memungkinkan utas untuk kembali ke posisi eksekusi yang benar, setiap utas perlu memiliki programmeter independen.
Ketika utas sedang dieksekusi adalah metode Java, penghitung ini mencatat alamat instruksi kode byte mesin virtual yang sedang dieksekusi; ketika metode asli dieksekusi, penghitungnya kosong.
Area memori ini adalah satu -satunya area yang tidak menentukan outofmemoryError.
Java Virtual Machine Stack
Tumpukan mesin virtual Java juga pribadi, dan siklus hidupnya sama dengan utas. Tumpukan mesin virtual menjelaskan model memori yang dijalankan dengan metode Java: Setiap metode akan membuat bingkai tumpukan untuk menyimpan tabel variabel lokal, menumpuk operasi, daftar tertaut dinamis, informasi ekspor metode, dll. Dari proses panggilan hingga proses penyelesaian dipanggil, itu sesuai dengan proses memasuki tumpukan di tumpukan mesin virtual ke tumpukan.
Dalam tabel variabel lokal, berbagai tipe data dasar (boolean, byte, char, pendek, float, long, double), referensi objek dan jenis returnAddress disimpan dalam kompiler.
Jika Anda tidak dapat mengajukan memori yang cukup selama ekstensi, pengecualian OutofmemoryError akan dilemparkan.
Tumpukan Metode Lokal <BR /> Tumpukan Metode Lokal mirip dengan mesin virtual. . Beberapa mesin virtual secara langsung menggabungkan tumpukan metode lokal dan tumpukan mesin virtual menjadi satu.
Akan melempar Stackoverflowerror dan kelainan outofmemoryerror.
Java Pile
Java Pile adalah area memori yang dibagikan oleh semua utas.
Tumpukan Java adalah area utama manajemen pengumpul sampah. Karena kolektor pada dasarnya digunakan untuk pembagian algoritma daur ulang, tumpukan java juga dapat dibagi lagi sebagai: generasi baru dan usia tua. Dari perspektif distribusi memori, tumpukan java utas -shared dapat membagi beberapa utas yang didistribusikan secara pribadi (TLAB).
Tumpukan Java dapat berada dalam ruang memori terputus fisik, asalkan secara logis kontinu. Dalam hal implementasi, itu tidak hanya dapat mencapai ukuran atau ekstensi tetap.
Jika tidak ada alokasi instance penyelesaian memori di tumpukan, dan tumpukan tidak dapat diselesaikan, outofmemoryError akan dibuang.
Area metode
Area metode adalah area memori yang dibagikan oleh berbagai utas.
Secara relatif, perilaku pengumpulan sampah jarang muncul di bidang ini, tetapi tidak ada secara permanen di bidang metode yang masuk.
Ketika area metode tidak dapat memenuhi kebutuhan distribusi memori, outofmemoryError akan dibuang.
Menjalankan Pool Konstan:
Ini adalah bagian dari area metode, yang digunakan untuk menyimpan berbagai jenis dan referensi simbol yang dihasilkan oleh periode kompilasi.
Memori langsung
Memori langsung bukan bagian dari area data ketika mesin virtual sedang berjalan.
Alokasi memori langsung tidak akan dibatasi oleh ukuran tumpukan java, tetapi akan dibatasi oleh ukuran memori, dan semua juga dapat melemparkan pengecualian outofmemoryrerror.
Ketiga, proses pembuatan, tata letak, dan akses objek
Pembuatan objek
Membuat objek biasanya membutuhkan kata kunci baru. Jika proses pemuatan kelas yang sesuai dijalankan.
Setelah kelas dimuat, mesin virtual akan mengalokasikan memori untuk siswa baru. Tugas mengalokasikan ruang untuk objek setara dengan membagi sepotong memori yang ditentukan oleh ukuran dari tumpukan java. Ada dua cara untuk dialokasikan: satu disebut tabrakan pointer. Nama lain adalah daftar kosong: Jika memori di tumpukan java tidak teratur, mesin virtual perlu mempertahankan satu daftar, yang mencatat blok memori mana yang tersedia. Contoh objek. dan perbarui catatan di daftar. Metode distribusi mana yang ditentukan oleh apakah tumpukan java diatur, dan apakah tumpukan java ditentukan oleh apakah pengumpul sampah digunakan dengan kompresi dan fungsi organisasi. Masalah lain yang perlu dipertimbangkan adalah masalah keamanan utas ketika objek menciptakan. memori (TLAB) di tumpukan java.
Setelah distribusi memori selesai, mesin virtual perlu menginisialisasi ruang memori terdistribusi ke nilai nol. Langkah ini memastikan bahwa bidang instance objek dapat digunakan secara langsung dalam kode Java tanpa nilai awal.
Selanjutnya, mesin virtual perlu mengatur pengaturan yang diperlukan, seperti kelas mana dari objek ini adalah instance dari kelas, cara menemukan informasi metadata kelas, dll. Informasi ini disimpan di kepala objek objek.
Setelah pekerjaan di atas selesai, objek baru telah dihasilkan dari perspektif mesin virtual. Namun, dari perspektif program Java, metode init juga diperlukan untuk menginisialisasi objek sesuai dengan keinginan programmer.
Tata letak memori objek
Di mesin virtual hotspot, tata letak objek dalam memori dapat dibagi menjadi tiga bagian: kepala objek, data instance, dan pengisian penyelarasan.
Kepala objek mencakup dua bagian: Bagian pertama digunakan untuk menyimpan data objek itu sendiri, seperti kode hash, usia penuaan GC, dan kunci yang dipegang oleh utas. Pejabat itu disebut "Mark Word". Bagian kedua adalah tipe pointer, yaitu, pointer objek ke data metad kelasnya, dan mesin virtual menentukan kelas mana dari objek ini dengan pointer ini.
Data instan adalah informasi efektif yang disimpan dalam objek, dan juga berbagai konten bidang yang ditentukan dalam kode program.
Pengisian perataan tidak selalu ada, hanya memainkan peran karakter pekerjaan. , Hotpot VM mensyaratkan bahwa alamat awal dari objek harus merupakan kelipatan integer dari 8 byte. penyelarasan.
Posisi akses objek
Program Java mengoperasikan objek spesifik pada tumpukan melalui data referensi pada tumpukan. Metode akses utama adalah dua jenis: pegangan dan penunjuk langsung:
Staf: Java Heaps akan menarik sepotong memori sebagai kumpulan pegangan. Seperti yang ditunjukkan pada gambar:
Direct Pointer: Tata letak objek tiang java harus mempertimbangkan cara menempatkan informasi yang relevan dari data jenis dari jenis akses, dan alamat objek disimpan dalam referensi. Seperti yang ditunjukkan pada gambar:
Dua metode memiliki keunggulan mereka sendiri Pengeluaran waktu untuk posisi penunjuk.
Di atas adalah semua isi artikel ini.