Почему точка (которая является javaagent) загружается загрузчиком класса начальной загрузки? - PullRequest
0 голосов
/ 20 мая 2018

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

Обычно агент java должен загружаться загрузчиком классов приложения, как это происходит в classpath.Но я обнаружил, что точка загрузки загружается загрузчиком классов начальной загрузки.И я проверил, что pinpoint-bootstrap.jar добавлен в sun.boot.class.path.Я заинтересован в черной магии.

вот код.https://github.com/naver/pinpoint/blob/master/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/PinpointBootStrap.java#L45

Как точно достичь этого?Может быть, @emeroad об этом знает.

1 Ответ

0 голосов
/ 21 мая 2018

Это является следствием атрибута Boot-Class-Path в манифесте агента .Благодаря этой записи файл jar агента добавляется в путь поиска загрузчика начальной загрузки.Это делается дополнительно к добавлению агента в загрузчик классов системы (приложения), как это делается для любого агента.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...