Pengantar Detail untuk Proses Pemuatan Kelas Java Dasar
Proses Dasar:
- Muat aliran byte biner yang mendefinisikan kelas berdasarkan nama kelas yang sepenuhnya memenuhi syarat.
- Konversi struktur penyimpanan statis yang diwakili oleh aliran byte menjadi struktur data runtime dari area metode
- Menghasilkan objek java.lang.class yang mewakili kelas ini dalam memori, dan menggunakannya sebagai metode untuk mengakses berbagai portal akses data dari kelas ini.
Kelas array itu sendiri tidak dibuat melalui class loader, tetapi dibuat langsung oleh mesin virtual Java, dan jenis elemen dari kelas array dimuat oleh class loader.
Jenis Elemen Kelas Array: Jenis Array Setelah Menghapus Semua Dimensi.
Verifikasi Format File:
- 0xCafeBaby dimulai dengan nomor ajaib;
- Mesin virtual saat ini dapat menangani nomor versi primer dan sekunder;
- tipe konstan;
- Jenis eksekusi indeks;
- Tipe data yang dikodekan UTF8,
Verifikasi Metadata: Analisis Semantik Bytecode Deskripsi Informasi:
- Apakah ada kelas orang tua;
- Apakah kelas induk mewarisi kelas yang dimodifikasi akhir;
- Apakah kelas yang tidak diekstraksi mengimplementasikan metode yang perlu diimplementasikan di kelas induk atau antarmuka;
- Menimpa bidang dan metode di kelas, kontradiksi berlebih;
Verifikasi bytecode: Tentukan legalitas dan kebenaran program melalui aliran semantik dan analisis aliran kontrol, dan verifikasi analisis tubuh.
- Verifikasi referensi simbol: Ketika mesin virtual mengubah referensi simbol menjadi referensi langsung, pada tahap parsing, ia melakukan verifikasi yang cocok pada informasi di luar kelas itu sendiri.
- Apakah kelas yang sesuai dapat ditemukan dengan nama yang sepenuhnya memenuhi syarat yang dijelaskan oleh karakter dalam referensi simbolik;
- Menentukan apakah ada deskriptor di kelas yang cocok dengan bidang metode, serta metode dan bidang yang dijelaskan dengan nama sederhana;
- Aksesibilitas kelas, bidang, dan metode dalam referensi simbolik.
Persiapan: Alokasikan memori untuk variabel kelas di area metode dan atur nilai awal variabel kelas.
- Nilai awal biasanya nilai nol dari tipe data, dan nilai akhir yang dimodifikasi secara langsung diinisialisasi ke nilai yang sesuai.
- Variabel kelas adalah variabel yang dimodifikasi secara statis, dibedakan dari variabel instance.
Analisis: Mesin virtual menggantikan referensi simbolik di kumpulan konstan dengan proses referensi langsung
Constant_class_info, constant_fieldref_info, constant_methodref_info ..
- Referensi Simbol: Satu set simbol menjelaskan target yang direferensikan. Segala bentuk literal dapat digunakan untuk menemukan target tanpa ambiguitas. Ini tidak ada hubungannya dengan implementasi memori mesin virtual dan terlepas dari apakah target referensi dimuat.
- Referensi Langsung: Pointer langsung ke target, offset atau pegangan yang secara tidak langsung terletak pada target, terkait dengan memori yang diimplementasikan oleh mesin virtual. Objek target terkait referensi langsung harus dimuat.
- . . .
Inisialisasi: Mulailah menjalankan kode program Java dalam definisi kelas. Jalankan metode Class Constructor <init> (),
<sinit> ():
- Kompiler secara otomatis mengumpulkan tindakan penugasan variabel kelas di kelas sesuai dengan urutan definisi dalam file kelas dan menggabungkan pernyataan blok pernyataan statis. Blok pernyataan statis hanya dapat mengakses variabel yang ditentukan sebelumnya.
- Berbeda dari konstruktor kelas, konstruktor kelas induk tidak diharuskan dipanggil seperti yang ditunjukkan. Mesin virtual memastikan bahwa kelas induk <intyit> () telah dieksekusi sebelum subkelas dieksekusi.
- Blok pernyataan statis di kelas induk dieksekusi terlebih dahulu.
- <sinit> () tidak diperlukan untuk kelas atau antarmuka, dan tidak akan dihasilkan jika tidak ada operasi penugasan variabel atau blok pernyataan statis.
- <sinit> () dari antarmuka tidak perlu menjalankan <cinit> () antarmuka induk terlebih dahulu, dan kelas implementasi antarmuka yang sama <init> () tidak diperlukan.
- Keselamatan Thread: Mesin virtual memastikan bahwa <sinit> () dikunci dengan benar dan disinkronkan dalam lingkungan multi-utas. Hanya satu utas yang dapat mengakses <sinit> () dari kelas inisialisasi secara bersamaan.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!