2013-07-11 3 views
6

При отладке Spring-driven AspectJ LTW (с использованием -verbose: class) я заметил, что один из классов, который будет рекомендован, загружается загрузчиком классов до того, как Spring установит соединение с AspectJ ткач.Получить иерархию ссылок на загрузку классов Java

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

Возможно ли получить «стек ссылок», который провоцирует загрузку класса в JVM в определенный момент (так что я могу попытаться отложить его использование)? Если да, то как я могу это сделать?

+0

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

ответ

2

Как вы уже отметили, Java (или фактически виртуальная машина, которая запускает ваш код) загружает и разрешает классы в то время, они необходимы. Это обычно также приводит к эффекту «стук» для нескольких классов. Очевидно, что существует высокая вероятность того, что классы, которые не содержат сплетенный код, загружаются до классов Spring.

Тем не менее, виртуальная машина Java HotSpot (типичная VM, когда установлена ​​Java-платформа Oracle) может быть configured во многих случаях при запуске. Одним из таких опций является «-XX: + TraceClassLoading» (обратите внимание на знак «плюс», ссылка на вышеупомянутую ссылку, к сожалению, содержит знак минус для этой опции). Существует еще один вариант, который отслеживает загруженные классы в ссылочном порядке.

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

+1

The - означает отключить опцию +, чтобы включить ее, она отображается там, потому что это значение по умолчанию. – Jacopofar

+0

Вы правы, но сколько раз вы просто копируете/вставляете этот вариант и задаетесь вопросом, почему он не показывает никакого эффекта? Это происходит со мной регулярно. :-) – Seelenvirtuose

+0

Спасибо за ваше предложение, но этот модификатор просто дает мне тот же результат, что и -verbose: class, т. Е. Печать при загрузке класса. Это полезно для определения линейных и простых зависимостей классов (путем просмотра предыдущих загруженных классов), но не для сложных. – andresp

Смежные вопросы