Classloader java klaslarının Java sanal makinesine(JVM) yüklenmesini sağlar. 3 farklı classloader bulunmaktadır. Peki bunlar nelerdir?
1. Bootstrap(ön yükleyici) Classloader :
- İlk olarak çalışan classloader dir.
- Yüklemeye \jre\lib\rt.jar konumundan başlar ve temel java klaslarını yükler.(util, lang).
- Native olarak yazılmış, çoğunluğunda C dili kullanılmıştır.
- Diğer tüm classloaderlerin atasıdır(Parent). Root olarak düşünebiliriz.
- Primordial Classloader olarakta bilinir.
2. Extension Classloader :
- İkinci olarak çalışır ve class dosyalarını yüklemeye jre/lib/ext klasöründen yada java.ext.dirs tarafından belirtilen kısımlardan başlar.
- Atası (Parent) bootstrap classloader dir.
- Java ile yazılmıştir.
3. Applicaton/System Classloader :
- Son olarak system classloader çalışır.
- Atası(Parent) extension classloader dir.
- Genellikle uygulama bağımlı klas dosyalarını yüklemek için kullanılırlar.
- Yüklemeye CLASSPATH ten başlar. Eğer -cp parametresi ile klas eklenmiş ise onlarıda yükler.
Classloader ler 3 temel prensibe dayanarak çalışırlar.
- Delegation (Delegasyon-Yetkilendirme)
- Visibility
- Uniqueness (Eşsizlik)
Delegation: Bir loader eğer yükleme yapacaksa atalarına bildirmeden yükleme yapamaz.
Sözde kod ile anlatacak olursak :
- Extension classloader hmenn klasini yüklemek ister
- Parenti olarak bootstrapa aynı klasın önceden yüklenme durumunu sorar.
- Eğer yüklenmemişse yükler, yüklendiyse yükleme işlemini iptal eder.
Bu durum system classloader içinde geçerlidir. Klasın daha önceden yüklenme durumunu parentlerine sırayla sorar.
Visibility: Bir loader parenti tarafından yüklenen klasları görebilir ama parent(ata) child(çocuk) ların yüklediğini göremez.
Uniqueness: Aynı isimde 2 klas yüklenemez. Delegasyondandaki sorgulama evresi ile bunun önüne geçilir.
Kendimiz RUNTIME esnasında nasıl klas yükleriz ?
Java klas yüklememiz için bize bir API sağlar. Bu API aracılığıyla Class.forName(klasAdi) metodu ile klas yükleyebiliriz. Bu işlem sırasıyla şöyle gerçekleşir.
Kendimiz RUNTIME esnasında nasıl klas yükleriz ?
Java klas yüklememiz için bize bir API sağlar. Bu API aracılığıyla Class.forName(klasAdi) metodu ile klas yükleyebiliriz. Bu işlem sırasıyla şöyle gerçekleşir.
- loadClass() metodu çalışır ve jar dosyaları arasında klası arar.
- Eğer klas var ise yüklemeyi gerçekleştirir.
- Eğer yok ise ClassNotFoundException fırlatır.
Hiç yorum yok:
Yorum Gönder