2013-07-11 12 views
6

Podczas debugowania Spring-driven AspectJ LTW (przy użyciu -verbose: class) zauważyłem, że jedna z klas, którą należy doradzić, jest ładowana przez moduł ładujący klasy, zanim Spring ustanowi połączenie z AspectJ tkacz.Uzyskiwanie hierarchii odwołań do ładowania klas Java

Biorąc pod uwagę, że Java odkłada ładowanie klasy, dopóki nie będzie możliwe opóźnienie jej więcej, musi istnieć powód, dla którego ta klasa jest ładowana tak szybko.

Czy jest możliwe uzyskanie "stosu referencji", który prowokuje ładowanie klasy do maszyny JVM w określonym momencie (co mogę spróbować odłożyć na później)? Jeśli tak, jak mogę to zrobić?

+0

Może to być dobry pomysł, aby sprawdzić swoją ścieżkę klas, która może zawierać klasę i jest ładowana, zanim w rzeczywistości otrzyma możliwość udzielenia porady. – Shailendra

Odpowiedz

2

Jak już zauważyłeś, Java (a właściwie VM, która uruchamia twój kod) ładuje i rozstrzyga klasy w czasie, są one potrzebne. Zwykle prowadzi to do efektu domina dla kilku klas. Jest oczywiście duża szansa, że ​​klasy, które nie zawierają tkanego kodu, są ładowane przed klasami wiosennymi.

Jednak maszyna wirtualna Java HotSpot (typowa maszyna wirtualna, w przypadku zainstalowania Javy Oracle) może być pod wieloma względami na configured podczas uruchamiania. Jedną z tych opcji jest "-XX: + TraceClassLoading" (uwaga na znak plus; powyższe łącze niestety dokumentuje znak minus dla tej opcji). Istnieje również inna opcja, która śledzi załadowane klasy w kolejności referencyjnej.

Dzięki temu powinieneś być w stanie zmniejszyć problem. Jeśli nie, może pomóc przykładowy kod. Chociaż obawiam się, że byłoby to trochę za duże.

+1

The - oznacza, aby wyłączyć opcję, + aby ją włączyć, jest tam wyświetlana, ponieważ jest to wartość domyślna. – Jacopofar

+0

Masz rację, ale ile razy po prostu kopiujesz/wklejasz opcję i zastanawiasz się, dlaczego nie pokazuje ona żadnego efektu? Zdarza mi się to regularnie. :-) – Seelenvirtuose

+0

Dzięki za twoją sugestię, ale ten modyfikator daje mi takie samo wyjście jak -verbose: klasa, tj. Drukowanie po załadowaniu klasy. Jest to przydatne do identyfikowania liniowych i prostych zależności klas (patrząc na poprzednie załadowane klasy), ale nie aż tak bardzo dla złożonych. – andresp