Proses pemuatan kelas: 1. Fasa pemuatan; 3. Fasa penyediaan, terutamanya memperuntukkan pembolehubah kelas dalam kawasan kaedah 5. Fasa pengkompil menggabungkan pembolehubah tugasan statik dan kawasan statik yang diisytiharkan dalam fail kelas untuk menjana kaedah cinit dan memanggilnya 6. Fasa penggunaan 7. Fasa nyahpasang;
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi Java 8, komputer DELL G3.
Untuk memahami proses pemuatan kelas JVM, anda perlu menjawab dua soalan utama:
1 Bilakah kelas dimuatkan?
2. Bagaimana kelas dimuatkan.
1 Keadaan yang mencetuskan pemuatan kelas:
Proses pemuatan kelas terbahagi kepada tujuh. Peringkat: pemuatan, pengesahan, penyediaan, penghuraian, pemulaan, penggunaan dan pemunggahan urutan lima proses pemuatan, pengesahan, penyediaan, permulaan dan pemunggahan ditentukan dengan ketat JVM tidak menentukan masa pemuatan kelas Walau bagaimanapun, ditetapkan dengan tegas bahawa kelas mesti dimulakan dengan segera di bawah lima keadaan, dan pemuatan mesti dilakukan sebelum ini.
1 Apabila menemui empat arahan baharu, getstatic, putstatic dan invokestatic, jika kelas belum dimulakan, kelas akan dimulakan terlebih dahulu.
2. Apabila menggunakan kaedah pakej java.lang.reflect untuk membuat panggilan reflektif ke kelas, jika kelas belum dimulakan, pemulaannya akan dicetuskan.
3 Apabila memulakan kelas, jika kelas induk kelas itu belum dimulakan, permulaan kelas induknya dicetuskan terlebih dahulu.
4. Untuk menjalankan JVM, anda mesti menentukan kelas utama yang mengandungi kaedah utama Mesin maya akan memulakan kelas ini terlebih dahulu.
5 Apabila menggunakan sokongan bahasa dinamik Jdk1.7, jika hasil penghuraian akhir contoh java.lang.invoke.MethodHandle ialah pemegang kaedah REF_getstatic, REF_putstatic, REF_inokestatic dan kelas yang sepadan dengan pengendalian kaedah ini Permulaan kelas ini dicetuskan apabila tiada pemulaan.
2. Proses pemuatan kelas
Proses pemuatan kelas terutamanya dibahagikan kepada tujuh peringkat: pemuatan, pengesahan, penyediaan, penghuraian, permulaan, gunakan, nyahpasang.
1 Memuatkan:
1) Muatkan strim bait binari yang sepadan dengan kelas melalui nama yang layak sepenuhnya. Terutamanya dilaksanakan melalui pemuat kelas.
2) Tukar struktur storan statik yang diwakili oleh aliran bait ke dalam struktur data masa jalan bagi kawasan kaedah.
3). Hasilkan objek java.lang.Class yang mewakili kelas ini dalam memori, yang berfungsi sebagai pintu masuk untuk setiap kelas dalam kawasan kaedah untuk mengakses kelas ini. (Hotspot menjana kelas ini dalam kawasan kaedah).
2. Pengesahan:
1), Pengesahan format fail: Sahkan sama ada pemalar nombor versi ajaib bagi fail kelas berada dalam julat yang disokong oleh mesin maya semasa.
2). Pengesahan metadata: Sahkan sama ada maklumat semantik kelas memenuhi keperluan spesifikasi bahasa Java.
3), pengesahan bytecode: Sahkan bahawa semantik program adalah sah dan mematuhi. Terutamanya melalui struktur rangka tindanan.
4) Pengesahan rujukan simbol: Mesin maya menukar rujukan simbol kepada rujukan langsung dan mengesahkan sama ada kelas yang diwakili oleh nama rujukan simbol yang layak sepenuhnya boleh ditemui, sama ada domain dan kaedah yang sepadan boleh didapati. ditemui dan sama ada kebenaran akses itu sah.
3. Penyediaan:
Fasa penyediaan terutamanya memperuntukkan dan memulakan memori untuk pembolehubah kelas (diubah suai oleh pengubah suai statik) dalam kawasan kaedah.
数据类型 | 零值 | 数据类型 | 零值 |
---|---|---|---|
int | 0 | boolean | false |
long | 0L | float | 0.0f |
short | 0 | double | 0.0d |
char | 'u0000' | reference | null |
byte | 0 |
4. Penghuraian:
1), penghuraian kelas atau antara muka: tukar rujukan yang layak kepada rujukan langsung kelas dan semak kebenaran akses.
2). Penghuraian medan: Tukar rujukan simbolik medan ke dalam maklumat kelas yang dimiliki medan itu atau rujukan langsung kepada medan kelas induknya dan semak kebenaran akses.
3) Penghuraian kaedah kelas: Tukar rujukan simbolik kaedah kelas kepada maklumat kelas yang dimiliki oleh kaedah kelas atau rujukan terus kepada medan kelas induknya dan semak kebenaran akses.
4) Penghuraian kaedah antara muka: Tukar rujukan simbolik kaedah antara muka kepada maklumat antara muka yang dimiliki oleh kaedah antara muka atau rujukan terus kepada medan kelas induknya dan semak kebenaran akses.
5. Permulaan:
Dalam fasa permulaan, pengkompil akan menggabungkan pembolehubah tugasan statik dan kawasan statik yang diisytiharkan dalam fail kelas untuk menjana
Pemuat kelas: Pemuat kelas ialah pelaksanaan "memuatkan strim bait perduaan kelas melalui nama yang layak sepenuhnya". dalam mesin maya.
Model perwakilan ibu bapa:
1. Bootstrap ClassLoader memulakan pemuat kelas dan bertanggungjawab untuk memuatkan
2. Extension ClassLoader bertanggungjawab untuk memuatkan pakej di bawah
3.
4. User ClassLoader Pemuat kelas yang ditentukan oleh pengguna.
Model delegasi induk memuatkan kelas dengan cara ini: apabila pemuat kelas menerima permintaan untuk memuatkan kelas, ia mula-mula mewakilkan kelas induk untuk memuatkan kelas Semua pemuat kelas menggunakan kaedah ini, jadi semua pemuatan kelas permintaan Mereka semua akan mencapai kelas induk peringkat teratas Jika kelas induk tidak boleh dimuatkan, pemuat kelas akan digunakan untuk memuatkannya. Dengan cara ini, terdapat hubungan hierarki antara pemuat kelas, yang boleh memastikan bahawa kelas asas Java dimuatkan oleh pemuat kelas yang sama, yang memainkan peranan penting dalam kestabilan sistem Java.
Tutorial video berkaitan yang disyorkan: Tutorial video Java
Atas ialah kandungan terperinci Apakah peringkat proses pemuatan kelas jvm. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!