|
|
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
В java классы загружают в память класслоадеры. Этих класслоадеров по умолчанию 3. Можно добавлять и свои. Я не очень понял а зачем это всё нужно то? почему не сделать просто один лоадер, который всё грузит, все классы всегда видны, никаких проблем, солнышко светит, небо голубое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 19:10 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questioner, Это нужно для изоляции, приоритета и безопасности. Да, на десктопном приложении это не так очевидно. Но вот для апплетов и JEE - очень важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 19:19 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Хотя даже для десктопа - bootstrap загрузчик особенный. Там доступны всяческие оптимизации, такие как CDS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 19:22 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestioner, Это нужно для изоляции, приоритета и безопасности. Да, на десктопном приложении это не так очевидно. Но вот для апплетов и JEE - очень важно. изоляция понятно - на одном сервере надо запускать много приложений, которые используют разные версии библиотек. а Безопасноcть и приоритеты ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 19:33 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerBlazkowiczquestioner, Это нужно для изоляции, приоритета и безопасности. Да, на десктопном приложении это не так очевидно. Но вот для апплетов и JEE - очень важно. изоляция понятно - на одном сервере надо запускать много приложений, которые используют разные версии библиотек. а Безопасноcть и приоритеты ? Кажется с безопасностью частично понятно. делаем класс в пакете java.lang и можем иметь доступ как минимум к package visible членам класса. Что видимо не предполагалось создателями джавы но почему тогда сделать не 2, а 3 именно? для расширений отдельный лоадер зачем? ну и приоритеты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 19:47 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerдля расширений отдельный лоадер зачем? А как тогда? Это же барахолка, а не обязательные классы. questionerну и приоритеты Класслоадеры по-умолчанию делегируют загрузку родителям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 19:59 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКласслоадеры по-умолчанию делегируют загрузку родителям. Нет, это очень сильно зависит от целей, которые пытается достичь создатель класслоадера, тут вообще не применимо никакое умолчание, как напишешь так и будет. Есть лишь общие рекомендации еще со времён SUN писать класслоадеры в описанной Вами манере, но цели натаптывания собственного класслоадера могут и расходится с рекомендациями как например в spring-jar-helsing или OSGI. Да даже в банальных JEE/WAR большинсво в адекватных сервлет-контейнерах в имплементациях загрузчика классов для веб приложения сначала пытаются резолвить классы из WEB-IN/classes, WEB-INF/lib и только в случае неудачи делигировать загрузку класслоадеру сервлет контейнера, чтобы случайно не подраться с сервером в случае когда серверу и приложению нужны разные версии одной и той же библиотеки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 00:13 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
vimba, Термин "по-умолчанию" вам не знаком? Объяснить что он обозначает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 06:32 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКласслоадеры по-умолчанию делегируют загрузку родителям. А почему именно такая концепция? это side effect решения проблемы изоляции и безопасности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 09:32 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questioner А почему именно такая концепция? Ну, приоритет загрузки же. Мы же хотим Java классы грузить из bootstrap загрузчика, а не загрузчика приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 09:35 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
vimbaНет, это очень сильно зависит от целей, которые пытается достичь создатель класслоадера, тут вообще не применимо никакое умолчание, как напишешь так и будет. Бред сивой кобылы. Есть базовая реализация java.lang.ClassLoader - в которой это поведение уже реализовано. Чтобы его переопределить нужно приложит дополнительные усилия. vimbaЕсть лишь общие рекомендации еще со времён SUN писать класслоадеры в описанной Вами манере Что наводит нас на мысль что исходый код java.lang.ClassLoader вы отродясь не видели. vimba, но цели натаптывания собственного класслоадера могут и расходится с рекомендациями как например в spring-jar-helsing Какая-то поделка на гитхабе, это, конечно, весомый аргумент. vimbaили OSGI. А в OSGi (а не OSGI, как некоторым могло показаться) вообще всё через >|<опу. Особенно весело когда там из-за этой фишки перестаёт работать половина библиотек, использующих, Class.forName(). vimbaДа даже в банальных JEE/WAR большинсво в адекватных сервлет-контейнерах в имплементациях загрузчика классов для веб приложения сначала пытаются резолвить классы из WEB-IN/classes, WEB-INF/lib и только в случае неудачи делигировать загрузку класслоадеру сервлет контейнера, чтобы случайно не подраться с сервером в случае когда серверу и приложению нужны разные версии одной и той же библиотеки. Мне можно не рассказывать. Я ещё в JBoss 3.x с вопросом разобрался досконально, когда мне пришлось там дружить десяток проектов написанных разными командами. Так вот, в те годы, как вы выражаетесь "адекватных сервлет-контейнеров" не было в принципе. На этот косяк наступили вообще все. Это раз. JBoss даже добавили флаг, который отключал делегирование родителям, но лучше от этого не становилось, это два. Ну, и три, что контейнеру всего лишь нужно было держать свои классы в отдельной ветке иерархии, а не в общей для всех модулей. Делегирование поиска родителям никуда не делось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 09:49 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
буквально сегодня спросили зачем фреимворки используют разные класслоадеры. Вот например spring. Судя по написанному выше - для изоляции. а что от чего изолировать нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 17:49 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerбуквально сегодня спросили зачем фреимворки используют разные класслоадеры Это вопрос с подвохом. Фреймверки не используют разные класслоадеры. Контейнеры используют. JEE контейнеры, OSGi контейнеры, самописные контейнеры плагинов. "фреймверки" - это вообще про другое. Почитайте определение и проихождение этого термина. questionerВот например spring Spring Framework не использует класслоадеры. Разве что их реализация OSGi. Только в данном случае Spring Framework это не "какой-то фреймверк", а нарицательное имя для семейства проектов. questionerСудя по написанному выше - для изоляции. а что от чего изолировать нужно? Модули нужно изолировать друг от друга, потому что модули могут использовать разные версии одинаковых библиотек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 18:36 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
[quot Blazkowicz]questionerбуквально сегодня спросили зачем фреимворки используют разные класслоадеры Это вопрос с подвохом. Фреймверки не используют разные класслоадеры. Контейнеры используют. JEE контейнеры, OSGi контейнеры, самописные контейнеры плагинов. "фреймверки" - это вообще про другое. Почитайте определение и проихождение этого термина. Вопрос звучал так: Берешь ты context.getBean("myBean") и пытаешься скачтить к MyClass. вываливается ClassCastException. При это берешь у этого myBean .getClass и видно, что он возвращает MyClass. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 11:52 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerВопрос звучал так: Одно и то же, да. Как буд-то без getBean() не обойтись. Ну, и причина ClassCastException и "зачем фреимворки используют разные класслоадеры", совсем чуточку разные вещи. Жаль что только про ClassCastException спросили. Там их ещё несколько более экзотических есть, по точно такой же причине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 12:20 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerВопрос звучал так: Одно и то же, да. Как буд-то без getBean() не обойтись. Ну, и причина ClassCastException и "зачем фреимворки используют разные класслоадеры", совсем чуточку разные вещи. Жаль что только про ClassCastException спросили. Там их ещё несколько более экзотических есть, по точно такой же причине. Ну единственное, что я смог сказать. что классы по всеё видимости разными класслоадерами загружены, если мы видимо такое поведение. Проясните, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 12:58 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerПроясните, пожалуйста. Прояснить что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 13:00 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПрояснить что? BlazkowiczНу, и причина ClassCastException и "зачем фреимворки используют разные класслоадеры", совсем чуточку разные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 13:43 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questioner, Так на много понятнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 14:17 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Ну, и причина ClassCastException и "зачем фреимворки используют разные класслоадеры", совсем чуточку разные вещи. Какие это конкретно причины? Почему для загрузки бина из контекста может использоваться другой класслоадер в spring? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 16:11 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerКакие это конкретно причины? Вопрос. Причина ClassCast. Ответ. Разные класслоадеры. Где тут про фреймверки? questionerПочему для загрузки бина из контекста может использоваться другой класслоадер в spring? getBean() это не "загрузка бина из контекста", а получение ссылки на него. А как он туда попал это уже дело десятое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 16:23 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerПочему для загрузки бина из контекста может использоваться другой класслоадер в spring? getBean() это не "загрузка бина из контекста", а получение ссылки на него. А как он туда попал это уже дело десятое.[/quot] А как он мог туда попасть загруженный другим класслоадером? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 16:27 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerА как он мог туда попасть загруженный другим класслоадером? Ну, например, из другого JEE модуля. Например у вас два модуля обмениваются данными. И вот вы нашли что этот обмен, достаточно узкое место. Как его ускорить? Поместить модули на один сервер. А можно быстрее? Конечно! Убрать сериализацию и заменить прямыми вызовами. Ну, либо ранее упомянутый OSGi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 16:35 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Я наверное не очень понимаю, что такое модуль. С JBOSS-ами работать не приходилось. Только деплоил варники в Tomcat/Jetty. Бывало, что для реализации продукта нужно было больше одного варники, но по сути это были разные приложения, общающиеся через rest или просто сидящие на одной базе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 16:56 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerобщающиеся через rest или просто сидящие на одной базе Ну, это как два разрабочика, которые сидят за соседними столами, но общаются исключительно по email. Если они пересекаются раз в месяц - это нормально. А если плотно работают над общей задачей и общим кодом, то наверное такое общение может стать и узким местом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 17:08 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39384462&tid=2123252]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 199ms |
| total: | 405ms |

| 0 / 0 |
