2013-07-11 6 views
6

Durante il debug di AspectJ LTW Spring (utilizzando -verbose: classe), ho notato che una delle classi da consigliare viene caricata dal programma di caricamento classi prima che Spring stabilisca la connessione all'AspectJ tessitore.Ottenere la gerarchia dei riferimenti di caricamento della classe Java

Considerando che Java posticipa il caricamento di una classe finché non è possibile ritardarla di più, ci deve essere una ragione per cui tale classe specifica viene caricata così presto.

È possibile ottenere lo "stack di riferimenti" che provoca il caricamento di una classe sulla JVM in un momento specifico (quindi posso provare a posticiparne l'utilizzo)? Se è così, come posso farlo?

+0

Potrebbe essere una buona idea controllare il percorso di classe che potrebbe contenere la classe e viene caricato prima che effettivamente molla ottenga l'opportunità di consigliare. – Shailendra

risposta

2

Come già notato, Java (o in realtà la VM, che esegue il codice) carica e risolve le classi al momento, sono necessarie. Questo normalmente porta anche a un effetto a catena per diverse classi. C'è ovviamente un'alta probabilità che le classi che non contengono il codice tessuto vengano caricate prima delle lezioni di primavera.

Tuttavia, la Java HotSpot VM (la tipica VM, quando è installato Oracle Java) può essere configured in molti modi all'avvio. Una di queste opzioni è "-XX: + TraceClassLoading" (notare il segno più, il collegamento sopra riportato sfortunatamente indica un segno meno per questa opzione). C'è anche un'altra opzione, che traccia le classi caricate nell'ordine di riferimento.

Con ciò, si dovrebbe essere in grado di restringere il problema. In caso contrario, potrebbe essere d'aiuto qualche codice di esempio. Anche se temo, sarebbe un po 'troppo grande.

+1

Il - significa disabilitare l'opzione, il + per abilitarlo, è mostrato lì perché è il valore predefinito. – Jacopofar

+0

Hai ragione, ma quante volte semplicemente copia/incolla l'opzione e ti chiedi, perché non mostra alcun effetto? Questo mi succede regolarmente. :-) – Seelenvirtuose

+0

Grazie per il tuo suggerimento, ma quel modificatore mi dà solo lo stesso risultato di -verbose: class, cioè stampa quando viene caricata una classe. Questo è utile per identificare le dipendenze di classi lineari e semplici (osservando le classi caricate precedenti), ma non tanto per quelle complesse. – andresp