Глубина понимания виртуальной машины Java (8): загрузчик классов

1, стадия загрузчика виртуальной машины класса, чтобы получить описание двоичного потока действия класса в виртуальной машине Java, за исключением квалифицированного имени класса, чтобы позволить приложению определить, как получить необходимые классы, реализующие этот тип действия Это называется загрузчик классов. Для любой необходимости иметь класс вместе, чтобы создать свою уникальность в виртуальной машине Java в своем классе погрузчиком и сам классе, каждый класс имеет погрузчик отдельный класса имен, два класс равен предпосылкой, что они сделали тот же загрузчик классов нагрузок.

пакет org.xiaofeiyang.classloader; 

импорт java.io.IOException;
импорт java.io.InputStream;

/ **
* @author: yangchun
* @description:
* @date: Созданный в 2019-11-23 22:39
* /
общественного класса ClassLoaderTest {
государственной статической силы основных (String [] арг) бросает ClassNotFoundException {
ClassLoader myLoader = новый ClassLoader () {
@Override
<?> Открытый класс loadClass (имя String) бросает ClassNotFoundException {
попытка {
Строка имя_файла = name.substring + (name.lastIndexOf () + 1 " ")" класс.";
InputStream является = GetClass () getResourceAsStream (имя_файла).
если (есть == NULL) {
вернуть super.loadClass (имя);
}
Байт [] разреш = новый байт [is.available ()];
is.read (RES);
возвращение defineClass (имя, Рез, 0, res.length);
} поймать (IOException е) {
певд ClassNotFoundException (имя);
}
}
};
Объект OBJ = myLoader.loadClass ( "org.xiaofeiyang.classloader.ClassLoaderTest");
System.out.println (obj.getClass ());
System.out.println (объект InstanceOf org.xiaofeiyang.classloader.ClassLoaderTest);
}
}
输出如下

Класс java.lang.Class
ложь

2, модель родитель делегация

Два типа загрузчика, загрузочный загрузчик классов, один, чтобы начать загрузчик классов, загрузчик классов является частью виртуальной машины ++, реализуемой с, а другой для всех других загрузчиков классов, реализуемого самого языком Java, независимо от к виртуальной машине Java, все наследование и абстрактные классы java.lang.Classloader.

1) Запустить загрузчик классов отвечает за JAVA_HOME папку Lib файл виртуальной машины Java может распознать rt.jar библиотека загружается в память виртуальной машины.

2) класс расширения компоновщик, загрузчик классов реализуется sun.misc.Launcher $ ExtClassLoader, этот общий загрузчик классов отвечает за загрузку java_home \ Lib \ внутр ниже библиотека классов, разработчики могут непосредственно использовать этот загрузчик класса.

3) класс приложения загрузчик, загрузчик классов реализуются sun.misc.Launcher $ App-ClassLoader, загрузчик классов является возвращаемым значением ClassLoader getSystemClassLoader () метода, так называемым системным класса загрузчиком отвечает за загрузку судов библиотека, под приложением обычно использует классы класса по умолчанию загрузчика.

 

 Эта связь между иерархией классов называются в качестве модели делегирования родительской, в дополнении к модели делегирования родительской верхнего уровня требует остальной части загрузчика классов должны иметь родительский загрузчик классов, используя сочетание подходов к мультиплекс код загрузчика классов родительской. Подкласс родительский класс получит запрос нагрузки к нагрузке, если нагрузка не будет брать на себя инициативу и сами должны быть загружены. Пособие является приоритетом, к.т. в классе не будет заменен, чтобы обеспечить стабильную работу виртуальной машины Java. Родитель модель делегирования кода в коде следующим образом java.lang.Classloader

 

 Родитель модель делегирования хорошее решение базового класса каждого объединения загрузчика классов.

модель делегирования Родитель уничтожается следующие три условия

1) унаследовали java.lang.Classloader переписать метод loadClass, чтобы избежать потребностей проблемных быть переписан метод findClass

2) JNDI код загружается загрузочный загрузчиком классов, провайдер код JNDI интерфейс в необходимости пути CLASSPATH назвать это путем установки загрузчик классов контекста нити, контекст резьбы ClassLoader если не набор по умолчанию наследует родительскую нить класс приложений погрузчик устройство

, Какой запрос загрузчик классов родитель для завершения суб-класс эксплуатации загрузчик классов нагрузки.

3) OSGI модульное горячего развертывания, пользовательский загрузчик классов Bundle модуль каждая программа имеет загрузчик классов, даже если Bundle нужно будет заменить заменяется той же нагрузке.

OSGi поиски класса выполняется в следующем порядке

 

рекомендация

отwww.cnblogs.com/xiaofeiyang/p/11920846.html