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

Как 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:

Используйте очередь для рисования двоичного дерева с шириной первого цвета в C#

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

31 10 2020 15:43:55

Делегаты и интерфейсы в C#

Делегаты: Делегаты являются ссылочными типами, поэтому они выделяют весь объект только для ссылки на метод. Делегаты быстрее всего звонят, когда вы знаете...

30 10 2020 14:55:54

Отправлять распечатку непосредственно на конкретный принтер в C#

Код устанавливает имя принтера, а затем вызывает метод PrintDocument объекта Print для немедленной отправки распечатки на этот принтер. Источник: http://cs...

29 10 2020 7:16:21

Как реализовать наследование в Python?

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

28 10 2020 2:15:42

Восстановить контроль в C#

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

27 10 2020 3:33:45

Нарисуйте масштабированное нормальное распределение в C#

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

26 10 2020 2:35:42

1С:Предприятие. Бухгалтерский учет. Секреты работы (Наталья Рязанцева)

Книга "1 С: Предприятие. Бухгалтерский учет. Секреты работы" посвящена системе программ ведения автоматизированного учета на предприятиях, в организациях и у...

25 10 2020 15:11:36

Как создать выпадающие списки в JavaScript

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

24 10 2020 4:53:58

Преобразование между длинными и короткими именами файлов в C#

Вы можете использовать функцию API GetShortPathName для преобразования от длинного к коротким именам файлов. Следующий код объявляет функцию API. Следующий...

23 10 2020 11:28:36

Анимация проблемы Башни Ханоя в C#

Следующий метод AnimateMovement перемещает диск по прямой линии из текущего местоположения в новый. Код вычисляет количество пикселей в секунду, которое он...

22 10 2020 12:42:33

Использование метода File.Replace для резервного копирования файлов на C#

В этом примере показано, как использовать метод File.Replace для создания двухуровневой системы резервного копирования журнала. Пример Сделать файл журнала...

21 10 2020 13:27:55

Добавление вкладок в TabControl во время выполнения в C#

Сообщение Сделать улучшенный собственный вкладчик TabControl в В C# показано, как создать созданный владельцем TabControl, который позволяет пользователю у...

20 10 2020 22:46:29

Получите серийный номер тома диска в C#

В этом примере используется функция API GetVolumeInformation, поэтому получите серийный номер тома диска. Он начинается с , используя пространство имен Sys...

19 10 2020 8:37:43

Self в Python

Self в Python представляет экземпляр класса. В отличие от этого в C ++, «я» не является ключевым словом, это всего лишь соглашение о кодировании. Часто пер...

18 10 2020 8:37:42

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

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

17 10 2020 8:18:43

HTML5. Недостающее руководство (Мэтью Мак-Дональд)

Доступно и в занимательной форме рассказано, как HTML превратился в HTML5. Рассмотрены семантические элементы и новые стандарты языка. Описано, как создава...

16 10 2020 18:11:45

Понимание переходных переменных в Java

Сериализация в Java - это механизм записи состояния объекта в поток байтов, а десериализация - это процесс преобразования потока байтов обратно в копию исх...

15 10 2020 20:38:37

List (список) в Python

List ( Список) в Python - один из наиболее часто используемых и очень универсальных типов данных, используемых в Python. Списки являются объектами и содержа...

14 10 2020 6:10:16

Как дать свойства индексатора по умолчанию для класса в C#

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

13 10 2020 1:51:46

Сделайте строковые расширения для URL-кодирования и декодирования строк в C#

Следующий код создает методы расширения для строкового класса, который позволяет преобразовывать пробелы в строку «& amp; nbsp;» и этот URL кодировать и де...

12 10 2020 23:14:59

Hashtable в Java

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

11 10 2020 7:43:31

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

Пример Сделать простая гистограмма в C# показывает, как рисовать гистограмму. В этом примере показано, как заполнять бары гистограммы изображениями. Следую...

10 10 2020 14:44:12

Добавить варианты ComboBox во время выполнения в C#

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

09 10 2020 15:24:53

Размер шрифта для соответствия метке в C#

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

08 10 2020 20:16:34

Web Scraping в Python?

Web Scraping - это метод компьютерного программного обеспечения для извлечения информации с веб-сайтов. Этот метод в основном фокусируется на преобразовани...

07 10 2020 11:58:46

Разница между JavaScript и ECMAScript?

ECMA означает Европейскую ассоциацию производителей компьютеров. ECMAScript - это стандарт языка программирования, такой как lisp. JavaScript - это реализа...

06 10 2020 15:16:42

Чтение / преобразование InputStream в строку в Java

Строка - это последовательность символов, используемых для хранения данных типа «Halo World!». Поток - это класс ввода / вывода, который используется для ч...

05 10 2020 2:35:23

Turbo Pascal: Учебник (С. А. Немнюгин)

Цель данного учебного курса - обучить программированию на Паскале, точнее, на том его расширении, которое было создано фирмой Borland и называется Турбо Па...

04 10 2020 4:20:19

Язык JavaScript (Илья Контор)

Эта часть позволит вам изучить Javascript с нуля или упорядочить и дополнить существующие знания. Мы будем использовать браузер в качестве окружения, но ос...

03 10 2020 7:28:16

Как объекты становятся пригодными для сбора мусора в Java?

Объект не станет кандидатом на сбор мусора, пока все ссылки на него не будут отброшены. Объект отмечен как имеющий право на сбор мусора, когда он больше не...

02 10 2020 13:17:51

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

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

01 10 2020 18:51:38

Циклы в JavaScript (FOR, FOR-IN, While, do..while) с примерами

Looping - фундаментальная идея программирования, которая обычно используется при написании программ. Цикл представляет собой последовательность команд s, к...

30 09 2020 4:14:13

Сделать общий класс очереди приоритетов в C#

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

29 09 2020 11:57:19

Отображение контекстного меню для элементов TreeView в C#

В этом примере отображаются различные контекстные меню при щелчке правой кнопкой мыши на разных типах узлов в элементе управления TreeView. В этом примере...

28 09 2020 16:26:32

Может ли класс верхнего уровня быть закрытым или защищенным в Java

Нет. Класс верхнего уровня как закрытый был бы совершенно бесполезен, потому что ничто не имело бы к нему доступа. Если класс верхнего уровня объявлен как...

27 09 2020 9:35:41

Мифы о программировании

Многие люди считают профессию программиста одной из самых сложных, поэтому отказываются от идеи освоить её. Но вокруг IT существуют мифы, которые нужно раз...

26 09 2020 1:32:17

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

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

25 09 2020 23:54:51

Рихтер Дж. CLR via C#: Программирование на платформе Microsoft .NET Framework 4.5 на языке C#

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

24 09 2020 0:58:38

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

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

23 09 2020 7:41:11

Область из непрозрачных пикселей в C#

Пример Создание профилей PictureBoxes в C# устанавливает Region из двух элементов управления PictureBox для круговых областей. Это хорошо работает в этом п...

22 09 2020 2:55:15

В чем разница между Reader и InputStream в Java

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

21 09 2020 15:11:11

List (список) в Python

List ( Список) в Python - один из наиболее часто используемых и очень универсальных типов данных, используемых в Python. Списки являются объектами и содержа...

20 09 2020 10:45:10

Нарисуйте кривую с несколькими цветами в C#

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

19 09 2020 13:12:54

Циклы в Java Примеры и синтаксис

Существует много ситуаций, когда вы хотите выполнить блок утверждений несколько раз в ваших приложениях. Петли могут выполнять блок кода несколько раз. Цик...

18 09 2020 1:19:43


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