Путь разработчика    

Как ClassLoader работает на Java?

eda2480d

Java Classloader является частью JRE (Java Runtime Environment), которая динамически загружает классы Java в JVM (виртуальная машина Java). В частности, Java-программа, в отличие от написанной на C или C ++, не является одним исполняемым файлом, а состоит из нескольких отдельных файлов классов, каждый из которых соответствует одному классу Java. Обычно классы загружаются только по требованию. Это означает, что эти файлы классов Java не загружаются сразу в память, а загружаются по требованию, как это требуется программе (Class Loader). Class Loader - это компонент с Java Execution Engine, который загружает двоичные данные из файлов .class, доступных в пути класса, в область методов. Загрузка класса в область метода происходит только в первый раз, когда класс ссылается в запущенном приложении Java. Для всех других ссылок данные повторно используются из области метода, если класс не был РАЗГРУЗЛЕН.

ClassLoader в Java работает по трем принципам:

  1. Делегирование
  2. Видимость
  3. Уникальность

Принцип делегирования запроса запроса загрузки класса на загрузчик родительского класса и загружает только класс, если родитель не может найти или загрузить класс. Принцип видимости позволяет загрузчику дочерних классов видеть все классы, загруженные родительским ClassLoader, но загрузчик родительского класса не может видеть классы, загруженные дочерним. Принцип единственности позволяет загружать класс ровно один раз, что в основном достигается путем делегирования и гарантирует, что дочерний класс ClassLoader не перезагрузит класс, уже загруженный родителем.

Все виртуальные машины JVM (Java) включают один загрузчик классов, встроенный в виртуальную машину. Этот встроенный загрузчик называется первоклассным загрузчиком классов. Это несколько особенное, потому что виртуальная машина (виртуальная машина) предполагает, что она имеет доступ к хранилищу доверенных классов, которые могут быть запущены виртуальной машиной без проверки. Когда виртуальная машина Java запущена, используются три загрузчика классов:

  1. Загрузочный загрузчик класса Bootstrap
  2. загрузчик классов расширений
  3. загрузчик системного класса

Загрузочный загрузчик класса bootstrap загружает внутренние классы JDK, обычно загружает rt.jar и другие базовые классы, например Java.lang. * Классы пакетов. Класс загрузчика классов расширений загружает классы из каталога расширений JDK, обычно $ JAVA_HOME / lib / ext каталога. Он реализуется классом sun.misc.Launcher $ ExtClassLoader. Системный загрузчик классов загружает код, найденный на Java.class.path, который сопоставляется с переменной среды CLASSPATH. Это реализуется классом sun.misc.Launcher $ AppClassLoader.

Создание простого ClassLoader

Загрузчик классов начинается с того, что является подклассом Java.lang.ClassLoader. Единственным абстрактным методом, который должен быть реализован, является loadClass(). Поток loadClass() выглядит следующим образом:

Загрузчик классов начинается с того, что является подклассом Java.lang.ClassLoader. Единственным абстрактным методом, который должен быть реализован, является loadClass(). Поток loadClass() выглядит следующим образом:...

Погрузчики классов являются иерархическими. Начальный класс загружается с помощью общедоступного метода static main(), объявленного в вашем классе. Все последующие загруженные классы загружаются классами, которые уже загружены и запущены.

Иерархия загрузчика классов

Большинство программистов Java никогда не должны явно использовать загрузчики классов (за исключением загрузки ресурсов, чтобы они все еще работали, когда они были объединены в JAR), не говоря уже о написании собственных. ClassLoaders используются в очень больших системах и серверных приложениях, чтобы делать такие вещи, как:

Class Loaders являются функциональным компонентом виртуальной машины Java, которая загружает данные класса из файла .class или из сети в область «Метод» в «Кучах». Каждый загрузчик классов имеет собственное пространство имен, а классы, вызываемые определенным загрузчиком классов, попадают в его пространство имен. Классы, вызываемые двумя разными загрузчиками классов, не будут иметь видимости друг над другом, что приведет к повышению безопасности. Механизм делегирования родительского дочернего элемента класса загрузчика гарантирует, что классы Java api никогда не могут быть взломаны несанкционированным кодом. Это связано с тем, что существуют загрузчики классов, время выполнения Java не должно ничего знать о файлах и файловых системах при запуске Java-программ. Кроме того, Java ClassLoader написан на языке Java. Это означает, что легко создать собственный ClassLoader, не понимая более тонкие детали JVM (виртуальная машина Java).

Источник: http://net-informations.com/Java/cJava/classloader.htm



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Qt 5.3. Профессиональное программирование на C++ (Шлее М.)

  Книга посвящена разработке приложений для Windows, Mac OS X и Linux с использованием библиотеки Qt версии 5.3. Подробно рассмотрены возможности, предостав...

24 01 2021 17:54:15

Как подсчитать пиксели разных цветов в C#

Следующий CountPixels метод подсчитывает пиксели в изображении, который соответствует целевому цвету. Этот код достаточно прост. Он пропускает пиксели, выз...

23 01 2021 9:26:52

Найти имя компьютера - Python

Существует несколько способов найти имя компьютера на Python. Модуль «socket» в Python обеспечивает доступ к интерфейсу сокетов BSD . Он доступен для всех...

22 01 2021 4:18:47

Список окон рабочего стола на C#

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

21 01 2021 18:42:55

Числовые выражения, введенные пользователем в C#

В этом примере показан один способ оценки математических выражений, введенных пользователем во время выполнения. Введите числовое выражение, включающее x и...

20 01 2021 12:25:50

Итерации над элементами массивов и списков в C#

Вы можете использовать цикл foreach для перебора элементов массивов, списков, коллекций и других объектов с методом GetEnumerator. Этот цикл часто больше п...

19 01 2021 2:18:25

Анимация изображений в C#

В этом примере показано, как анимировать изображения, загружая их во время выполнения, а затем воспроизводя их по одному. Чтобы упростить поиск изображений...

18 01 2021 23:20:33

Как распечатать ListView с большим содержимым в C#

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

17 01 2021 6:42:42

Сделайте мигающую метку в WPF и C#

В Windows Forms тривиально сделать мигающую метку. Что касается большинства других задач, WPF делает это намного сложнее, но дает вам дополнительную гибкос...

16 01 2021 5:39:58

Почему множественное наследование не поддерживается в Java

Это просто устранить двусмысленность, поскольку множественное наследование может вызвать двусмысленность вокруг проблемы Diamond в нескольких сценариях. На...

15 01 2021 10:31:26

Как манипулировать Dom

Основным объектом является объект Document, который, в свою очередь, содержит несколько других дочерних объектов. Каждый элемент в документе будет иметь со...

14 01 2021 21:30:21

Как получить IP-адрес в Python

Модуль сокетов в Python обеспечивает доступ к интерфейсу сокетов BSD. Имя socket.gethostbyname (имя хоста) переводит имя хоста в формат адреса IPv4. Адрес...

13 01 2021 2:14:37

Как динамически добавлять элементы html с помощью JavaScript?

HTML-документы можно легко получить и обработать с помощью HTML DOM, который представляет собой HTML-документ в виде древовидной структуры. Когда HTML-доку...

12 01 2021 3:16:36

Инициализация элементов управления DataGridView с объектами в C#

В этом примере показано, как легко инициализировать элементы управления DataGridView, чтобы отобразить свойства элементов. В этом примере используется след...

11 01 2021 0:44:32

Многопоточное программирование сокетов в Java?

Все разработчики знакомы с написанием последовательных программ, каждая последовательная программа имеет начало, последовательность выполнения и конец. Пот...

10 01 2021 1:16:28

Разработка веб-приложений с помощью PHP и MySQL (Люк Веллинг, Лора Томсон)

Эта книга предназначена для тех, кто уже знаком, по крайней мере, с основами HTML и ранее разрабатывал программы на современных языках программирования, но...

09 01 2021 15:30:50

Нарисуйте кривую Безье в C#

В этом примере показано, как использовать метод DrawBezier класса Graphics для рисования кривой Безье. Кривая Безье соединяет две конечные точки с гладкой...

08 01 2021 13:46:30

Нарисуйте текст на сегменте линии в C#

В этом примере показано, как вы можете нарисовать текст в сегменте линии. Ключ - это метод DrawTextOnSegment, показанный в следующем коде. Этот метод может...

07 01 2021 5:21:26

Основы программирования в Embarcadero Delphi (Никита Культин)

Книга представляет собой практическое руководство по программированию в Embarcadero Delphi. В ней представлена технология визуального проектирования и собы...

06 01 2021 13:42:18

Как реализовать «enum» в Python

Enum представляет собой набор символических имен , связанных с уникальными, постоянными значениями. В пределах перечисления значения могут сравниваться по...

05 01 2021 23:52:49

Копировать и вставить данные в нескольких форматах в буфер обмена в C#

В этом примере показано, как копировать и вставлять данные в несколько форматов в буфер обмена. Он сохраняет данные в форматах Rich Text (RTF), текста и HT...

04 01 2021 17:42:41

Добавление и удаление изображений на листе Excel

... Метод InsertPicture вызывает метод Insert для активного листа Picture. Затем он устанавливает свойства изображения Top и Left в Top и Left местоположен...

03 01 2021 7:19:58

Данные графика со стандартными диапазонами отклонения в C#

Примеры Нарисуйте нормальную кривую распределения в C# и Нарисуйте масштабированное нормальное распределение на C# , покажите один подход для визуализации...

02 01 2021 4:26:30

Программа Hello World в C#

В этой статье мы узнаем несколько версий программы Hello World на C#. Пример: 1 Обсуждение кода: Каждый Основной метод должен содержаться внутри класса (в...

01 01 2021 17:58:58

Различные режимы обработки файлов, поддерживаемые Python

Файл представляет собой некоторую информацию или данные, которые сохраняются (сохраняются) на запоминающих устройствах компьютера. Python предоставляет осн...

31 12 2020 22:49:33

1С:Предприятие 8.0: Приемы программирования (Всеволод Несвижский)

Книга 1 С: Предприятие 8.0: Приемы программирования полностью построена на реальных примерах и задачах, решаемых 1 С-программистами в повседневной работе. Пре...

30 12 2020 0:30:28

Нарисуйте заполненную кривую хризантемы в C#

Этот пример очень похож на Нарисовать кривую хризантемы в C# кроме того, он рисует заполненную кривую хризантемы. Он заполняет кривую, окрашивая треугольни...

29 12 2020 15:32:48

Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14 (Скотт Мейерс)

В этой книге отражен бесценный опыт ее автора как программиста на C++. Новые возможности этого языка программирования, появившиеся в стандартах C++11 и C++...

28 12 2020 6:16:43

Выполнение специальных команд SQL в C#

В этом примере используется OLE DB для подключения к базе данных доступа. ( К сожалению, этот метод не может создать базу данных, но вы можете использовать...

27 12 2020 19:21:29

LINQ. Карманный справочник (Джозеф Албахари, Бен Албахари)

Справочник посвящен технологии LINQ (Language Integrated Query) — новой функциональной возможности языка C# и платформы .NET Framework, которая позволяет п...

26 12 2020 2:41:22

Перетаскивание изображений при отображении предварительного просмотра в C#

Пример Перетаскивание изображений в C# объясняет, как для перетаскивания изображений. См. Этот пример для основных идей. ( Обратите особое внимание на второ...

25 12 2020 15:52:40

Оператор if-else в Java Примеры и синтаксис

Принятие решений является важной частью программирования. Он используется для указания порядка выполнения операторов. На этом уроке вы узнаете, как создава...

24 12 2020 2:54:12

C++ для чайников (Стефан Рэнди Дэвис)

Научитесь программировать! Полное руководство по C++, с учетом стандартов C++ и C++ 14. Вы всегда хотели научиться программировать, но не знали, какой язык...

23 12 2020 6:15:34

Как определить ОС на клиентском компьютере в JavaScript?

Свойство Window.navigator только для чтения возвращает ссылку на объект Navigator, который может быть запрошен для получения информации о приложении, выпол...

22 12 2020 3:51:41

Метод time.sleep() в Python

Метод python sleep(), используемый для приостановки выполнения для заданного времени (в секундах). Мы можем использовать функцию ожидания python, чтобы ост...

21 12 2020 1:21:25

Как быстро выбрать уровень сжатия JPEG в C#

Пример Сжатие файлов JPG до определенного размер в C# позволяет вам отрегулировать уровень сжатия JPG файла, пока он не станет больше указанного размера. О...

20 12 2020 12:24:46

Delphi 6. Учебный курс (В. В. Фаронов)

В книге "Delphi 6. Учебный курс" даются начальные сведения по системе программирования Delphi, разработанной американской корпорацией Borland International...

19 12 2020 14:57:12


Parse error: syntax error, unexpected ',' in /home/users/9/9165884745/domains/flash-mx.ru/lessons/926.php on line 69