Pemuat kelas pertama mesin maya Java ialah Bootstrap Pemuat ini bersarang dalam kernel mesin maya Java Ia adalah kod binari (bukan bytecode) yang ditulis dalam C++.
Menggunakan mekanisme delegasi, kelas induk akan dicari secara rekursif, iaitu, lebih baik menggunakan Bootstrap untuk cuba memuatkan, dan jika ia tidak dijumpai, turun ke bawah. Halang dua salinan kod bait daripada muncul dalam ingatan.
Anda salah fahamKelasdanClassLoader.
Apabila kelas direkodkan, mula-mula gunakanpemuat kelas bagi utas semasauntuk memuatkan kelas pertama dalam utas Contohnya, kelas ini ialah ClassA dan pemuat kelas ialah ClassLoaderA.
Jika ClassA merujuk ClassB, sistem akan menggunakan ClassLoaderA untuk memuatkan ClassB.
Kini terdapat 2 kelas (versi ringkas, sebenarnya lebih daripada 2 kelas).
Mari kita pertimbangkan situasi di mana ClassX dan ClassY telah dimuatkan dalam ingatan, dan kedua-duanya merujuk kepada ClassZ Jadi siapa yang memuatkan ClassZ?
Jelas sekali, mengikut langkah pemuatan yang diterangkan di atas, 2 salinan ClassZ akan muncul: ClassX dimuatkan sekali dan ClassY dimuatkan semula. Kerana ClassY tidak tahu bahawa ClassX telah dimuatkan.
Cara menyelesaikan masalah ini ialah dengan mencari secara rekursif ke kelas induk.
Langkah-langkah khusus ialah mencari terlebih dahulu daripada BootstrapClassLoader Jika BootstrapClassLoader telah memuatkan kelas ini, kembalikannya Jika BootstrapClassLoader belum memuatkan kelas ini, teruskan mencari sehingga ia menemui kelas ini. Jika pemuat kelas bagi utas ini tidak ditemui, ini bermakna kelas itu belum dimuatkan dan pemuat utas semasa digunakan untuk memuatkannya. Anda boleh menggunakangetContextClassLoader()untuk mendapatkan pemuat kelas urutan semasa.
Terdapat dua jenis pemuat kelas dalam Java: pemuat kelas sistem dan pemuat kelas yang ditentukan pengguna.
Pemuat kelas sistem akan mempunyai sekatan laluan pemuatan Contohnya,Bootstrap Class Loaderdi bawah JDK1.6, anda boleh mendapatkan laluan pemuatan kelas melaluiSystem.getProperty("sun.boot.class.path")
Kelas di bawah laluan ini dikendalikan olehBootstrapJika kelas di bawah laluan lain diulang kepadaBootstrapdan fail kelas tidak ditemui, pemuat kelas peringkat seterusnya akan memuatkannya dalam laluan yang sepadan.
Pemuat kelas pertama mesin maya Java ialah Bootstrap Pemuat ini bersarang dalam kernel mesin maya Java Ia adalah kod binari (bukan bytecode) yang ditulis dalam C++.
Menggunakan mekanisme delegasi, kelas induk akan dicari secara rekursif, iaitu, lebih baik menggunakan Bootstrap untuk cuba memuatkan, dan jika ia tidak dijumpai, turun ke bawah. Halang dua salinan kod bait daripada muncul dalam ingatan.
Anda salah fahamKelasdanClassLoader.
Apabila kelas direkodkan, mula-mula gunakanpemuat kelas bagi utas semasauntuk memuatkan kelas pertama dalam utas Contohnya, kelas ini ialah ClassA dan pemuat kelas ialah ClassLoaderA.
Jika ClassA merujuk ClassB, sistem akan menggunakan ClassLoaderA untuk memuatkan ClassB.
Kini terdapat 2 kelas (versi ringkas, sebenarnya lebih daripada 2 kelas).
Mari kita pertimbangkan situasi di mana ClassX dan ClassY telah dimuatkan dalam ingatan, dan kedua-duanya merujuk kepada ClassZ Jadi siapa yang memuatkan ClassZ?
Jelas sekali, mengikut langkah pemuatan yang diterangkan di atas, 2 salinan ClassZ akan muncul: ClassX dimuatkan sekali dan ClassY dimuatkan semula. Kerana ClassY tidak tahu bahawa ClassX telah dimuatkan.
Cara menyelesaikan masalah ini ialah dengan mencari secara rekursif ke kelas induk.
Langkah-langkah khusus ialah mencari terlebih dahulu daripada BootstrapClassLoader Jika BootstrapClassLoader telah memuatkan kelas ini, kembalikannya Jika BootstrapClassLoader belum memuatkan kelas ini, teruskan mencari sehingga ia menemui kelas ini. Jika pemuat kelas bagi utas ini tidak ditemui, ini bermakna kelas itu belum dimuatkan dan pemuat utas semasa digunakan untuk memuatkannya. Anda boleh menggunakan
getContextClassLoader()
untuk mendapatkan pemuat kelas urutan semasa.Terdapat dua jenis pemuat kelas dalam Java: pemuat kelas sistem dan pemuat kelas yang ditentukan pengguna.
Pemuat kelas sistem akan mempunyai sekatan laluan pemuatan Contohnya,
.Bootstrap Class Loader
di bawah JDK1.6, anda boleh mendapatkan laluan pemuatan kelasmelalui
System.getProperty("sun.boot.class.path")
Kelas di bawah laluan ini dikendalikan oleh
Bootstrap
Jika kelas di bawah laluan lain diulang kepadaBootstrap
dan fail kelas tidak ditemui, pemuat kelas peringkat seterusnya akan memuatkannya dalam laluan yang sepadan.Apa yang orang di atas katakan betul, saya cadangkan anda membaca buku berkaitan jvm untuk mengetahui lebih lanjut mengenainya.