Pemuatan kelas
Pemuatan kelas mengacu pada membaca data biner dari file kelas .class ke dalam memori, memasukkannya di area metode area data runtime, dan kemudian membuat objek java.lang.class di area heap untuk menggunakan merangkum struktur data dari kelas di area metode.
Cara memuat file .class:
1. Muat langsung dari sistem lokal
2. Unduh file .class melalui internet
3. Muat file .class dari zip, toples, dll.
4. Ekstrak file .Class dari database hak milik
5. Secara dinamis menyusun file sumber java ke dalam file .class
Produk akhir dari pemuatan kelas adalah objek kelas yang terletak di area tumpukan.
Objek kelas merangkum struktur data kelas di area metode dan memberikan antarmuka Java kepada programmer untuk mengakses struktur data di area metode.
Ada dua jenis loader loader kelas:
1. Loader yang dilengkapi dengan Java Virtualizer
Root class loader (bootstrap)
Loader kelas ekstensi (ekstensi)
Loader kelas sistem atau pemuat aplikasi (Sistem)
Dua loader terakhir diimplementasikan dalam Java, dan loader kelas root ditulis dalam C ++, dan programmer tidak dapat memperoleh kelas ini dalam kode Java.
2. Loader kelas yang ditentukan pengguna
Subkelas Java.lang.Classloader
Pengguna dapat menyesuaikan metode pemuatan kelas
Loader kelas tidak perlu menunggu sampai kelas pertama kali digunakan secara aktif sebelum memuatnya.
Spesifikasi JVM memungkinkan class loader untuk memuat kelas ketika mereka mengharapkannya untuk digunakan. Laporkan kesalahan (LinkageError). Jika kelas ini belum digunakan secara aktif oleh program, class loader tidak akan melaporkan kesalahan.
Mekanisme uninstallasi kelas
Siklus hidup kelas.
Ketika objek kelas yang mewakili kelas sampel tidak lagi dirujuk, yaitu, itu tidak dapat disentuh, objek kelas akan mengakhiri siklus hidup, dan data kelas sampel di area metode juga akan diturunkan, sehingga mengakhiri kehidupan Siklus kelas sampel.
Dapat dilihat bahwa ketika suatu kelas mengakhiri siklus hidupnya tergantung pada kapan objek kelas yang mewakili itu mengakhiri siklus hidupnya.
Referensi Hubungan Loader dan Objek Kelas:
Dalam implementasi internal class loader, koleksi Java digunakan untuk menyimpan referensi ke kelas yang dimuat.
Di sisi lain, objek kelas selalu merujuk loader kelasnya. Hubungi metode getClassLoader () dari objek kelas untuk mendapatkan loader kelasnya.
Dapat dilihat bahwa ada hubungan dua arah antara instance kelas dan loader yang memuatnya.
Objek kelas, objek kelas, objek instance kelas:
Sebuah contoh kelas selalu mengacu pada objek kelas yang mewakili kelas.
Metode getClass () didefinisikan di kelas objek, yang mengembalikan referensi ke objek kelas yang mewakili kelas yang dimiliki oleh objek.
Selain itu, semua kelas Java memiliki kelas properti statis yang merujuk objek kelas yang mewakili kelas ini.
Menghapus pemasangan kelas
Kelas yang dimuat oleh class loader yang dilengkapi dengan mesin virtual Java tidak akan pernah dihapus selama siklus hidup mesin virtual.
Seperti yang disebutkan sebelumnya, loader kelas yang datang dengan mesin virtual Java termasuk loader kelas root, loader kelas ekstensi dan pemuat kelas sistem.
Mesin virtual Java itu sendiri selalu merujuk loader kelas ini, dan loader kelas ini selalu merujuk pada objek kelas dari kelas yang dimuat, sehingga objek kelas ini selalu dapat diakses.
Kelas yang dimuat oleh loader kelas yang ditentukan pengguna dapat diturunkan.
Contoh spesifik
Variabel loader1 dan variabel OBJ secara tidak langsung menerapkan objek kelas yang mewakili kelas sampel, sedangkan variabel objClass secara langsung merujuknya.
Jika tiga variabel referensi di sisi kiri gambar di atas diatur ke nol selama operasi program, objek sampel mengakhiri siklus hidupnya, objek MyClassloader mengakhiri siklus hidupnya, dan objek kelas yang mewakili kelas sampel juga mengakhiri hidupnya Siklus.
Ketika itu perlu lagi, itu akan memeriksa apakah objek kelas dari kelas sampel ada. akan dihasilkan di area tumpukan mesin virtual Java.