Middle
ClassLoader дар Java чист?
sobes.tech AI
Ҷавоб аз AI
ClassLoader дар Java — ин компонент JRE, ки масъул аст барои боркунии синфҳо ба мошини виртуалии Java (JVM).
Функсияҳои асосӣ:
- Боркунӣ: Меёбад ва байткодҳои
.class-ро аз манбаъҳои гуногун (системаи файлҳо, шабака, архивҳои JAR) бор мекунад. - Линк (Linking):
- Верификация: Санҷиш мекунад, ки байткод дуруст аст ва мувофиқ бо стандартҳои бехатарӣ.
- Тайёрӣ: Ҳамоҳангсозӣ мекунад ёдгориҳои статикӣ ва арзишҳои пешфарзро ба онҳо медиҳад.
- Ҳал (Resolving) (ихтиёрӣ): Силсилаи ишораҳои рамзиро (масалан, ишораҳо ба синфҳо ё методҳо) ба ишораҳои мустақим дар ёдгориҳо иваз мекунад.
- Инициализация: Блокҳои статикии синфро иҷро мекунад ва арзишҳои ибтидоии майдонҳои статикиро таъин мекунад.
Иерархия:
ClassLoaderҳо иерархияро ташкил медиҳанд. Вақте ки ClassLoader бояд синфро боркунид, аввал ба ClassLoader-и падари худ супориш медиҳад. Агар падар наметавонад синфро пайдо ё бор кунад, ClassLoader-и ҳозира кӯшиш мекунад онро анҷом диҳад.
ClassLoaderҳои асосии дарунсохт:
- Bootstrap ClassLoader: қисми нативии JVM, ки синфҳои асосии JDK-ро бор мекунад (масалан,
java.lang.Object). - Extension ClassLoader (версияҳои муосири JVM метавонанд онро бо System ClassLoader якҷоя кунанд): синфҳоро аз директорияи
extдар JRE бор мекунад. - System ClassLoader: синфҳоро аз classpath-и барнома бор мекунад.
Масалан истифода:
// Гирифтани ClassLoader-и синфи ҳозира
ClassLoader classLoader = MyClass.class.getClassLoader();
try {
// Боркунии синф бо номи пурра
Class<?> loadedClass = classLoader.loadClass("com.example.AnotherClass");
System.out.println("Синф бор карда шуд: " + loadedClass.getName());
} catch (ClassNotFoundException e) {
System.err.println("Синф пайдо нашуд: " + e.getMessage());
}
Афзалиятҳо:
- Боркунии динамикӣ: Имкон медиҳад, ки синфҳоро дархостӣ бор кард, ки ин захираҳоро сарфа мекунад.
- Модулсозӣ: қисмҳои гуногуни барнома метавонанд ClassLoader-ҳои гуногунро истифода баранд, ки кӯмак мекунад коди ҷудо шавад.
- Бехатарӣ: Процеси верификацияи байткод бехатариро таъмин мекунад.
- Гарми ивазкунии синфҳо (HotSwapping): Дар муҳитҳои баъзе, ClassLoaderҳо имкон медиҳанд, ки синфҳои боркардаро бидуни бозоғозии JVM иваз кунанд.