Mengapa menggunakan class loader?
Dalam bahasa Java, pemuatan kelas selesai selama operasi program. Meskipun strategi ini akan sedikit meningkatkan overhead kinerja saat memuat kelas, itu akan memberikan aplikasi Java dengan tingkat fleksibilitas yang tinggi. Misalnya:
1.
2. Pengguna dapat menyesuaikan loader kelas, memungkinkan program untuk memuat aliran biner dari jaringan atau tempat lain sebagai bagian dari kode program saat runtime; (Ini adalah dasar untuk plug-in android, instalasi dinamis dan pembaruan APK)
Mengapa mempelajari seluruh proses pemuatan kelas?
Mekanisme pemuatan kelas
JVM memuat file kelas ke dalam memori, dan memeriksa, parse dan menginisialisasi data, dan akhirnya membentuk seluruh proses jenis Java yang dapat digunakan secara langsung JVM.
memuat
Muat konten bytecode dari file kelas ke dalam memori, dan ubah data statis menjadi struktur data runtime di area metode, dan menghasilkan objek java.lang.Class yang mewakili kelas ini di heap, sebagai portal akses untuk data kelas area metode. Proses ini membutuhkan partisipasi loader kelas.
Link
Proses menggabungkan kode biner dari kelas Java ke dalam keadaan JVM yang sedang berjalan
inisialisasi
<clinit>() . Metode Class Constructor <clinit>() dihasilkan oleh kompiler secara otomatis mengumpulkan tindakan penugasan semua variabel kelas di kelas dan penggabungan pernyataan di blok pernyataan statis (blok statis).<clinit>() kelas dikunci dengan benar dan disinkronkan dalam lingkungan multi-utas.Contoh 1:
kelas publik demo01 {public static void main (string [] args) {a = new a (); System.out.println (A.Width); }} class a {public static int width = 100; // variabel statis, bidang statis bidang statis {system.out.println ("Kelas Inisialisasi Statis A"); lebar = 300; } public a () {System.out.println ("Buat objek kelas A"); }}menganalisa:
menjelaskan:
Ada tumpukan, tumpukan (tempat -tempat yang dibuat objek), dan area metode dalam memori (sebenarnya tumpukan khusus)
1. Ketika JVM memuat demo01, pertama membentuk data statis (variabel kelas, metode kelas, kode ...) di area metode. Pada saat yang sama, objek java.lang.Class (objek reflektif) akan dibentuk di tumpukan, mewakili kelas Demo01. Melalui objek, struktur biner kelas dapat diakses. Kemudian muat informasi kelas A variabel, dan juga membentuk objek A di heap, mewakili kelas A.
2. Ketika metode utama dieksekusi, bingkai tumpukan metode utama akan dibentuk di tumpukan, dan satu metode sesuai dengan bingkai tumpukan. Jika metode utama memanggil metode lain, itu akan menekannya satu per satu di tumpukan. Ada variabel lokal A Tipe A dalam metode utama. Pada awalnya, nilai A adalah nol. Konstruktor Kelas A dipanggil melalui yang baru. Metode A () dihasilkan dalam tumpukan dan objek A dihasilkan di heap. Maka alamat objek A dibayarkan ke A di tumpukan. Pada saat ini, A memiliki alamat objek A.
3. Ketika A.Width dipanggil, data area metode dipanggil.
Saat kelas dimuat dengan referensi, kelas hanya akan dimuat sekali
Referensi aktif kelas (inisialisasi kelas pasti akan terjadi)
java.lang.reflect untuk melakukan panggilan refleksi ke kelas Referensi pasif ke kelas (inisialisasi kelas tidak akan terjadi)
Contoh 2:
Public Class Demo01 {static {System.out.println ("Static Initialization Demo01"); } public static void main (String [] args) melempar Exception {System.out.println ("Metode utama Demo01!"); System.out.println (System.getProperty ("java.class.path")); // Referensi Aktif // A baru (); // System.out.println (A.Width); // class.forname ("com.sinosoft.test.a"); // referensi pasif // System.out.println (a.max); // a [] as = baru a [10]; System.out.println (b.width); // Kelas B tidak akan dimuat}} kelas B memperluas A {static {System.out.println ("Inisialisasi statis B"); }} kelas A memperluas a_father {public static int width = 100; // variabel statis, bidang domain statis public static final int max = 100; static {system.out.println ("Static Initialization Class A"); lebar = 300; } public a () {System.out.println ("Buat objek kelas A"); }} kelas A_FATHER memperluas objek {static {System.out.println ("Inisialisasi statis A_FATHER"); }}Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.