2009-04-15 7 views

risposta

3

Suppongo che sia necessario utilizzare un profiler. O qualcosa che usa l'interfaccia della strumentazione.

Non sono sicuro di quanto sia stabile, ma c'è BTrace, che è una specie di versione Java di DTrace.

BTrace è uno strumento di tracciamento sicuro e dinamico per la piattaforma Java. BTrace può essere utilizzato per tracciare dinamicamente un programma Java in esecuzione. BTrace strumenta dinamicamente le classi dell'applicazione di destinazione per iniettare il codice di tracciamento ("tracciato bytecode"). Il codice di traccia è espresso nel linguaggio di programmazione Java.

Se si esegue questa operazione su un computer di sviluppo e il numero di eventi (risorse in corso di caricamento) non è troppo frequente, è possibile anche impostare un punto di interruzione nel debugger.

+0

il link è morto –

+0

@FastSnail: sembra si trasferirono a Github. Link aggiornato. – Thilo

2

Le risorse sono fornite come URL s. Quindi, immagino di farlo in Java "puro": installa un numero personalizzato ClassLoader che copia URL s in una versione con un numero personalizzato URLStreamHandler. Inserisci il codice di monitoraggio nel gestore di streaming e inoltralo all'originale.

1

In un ambiente Linux si può provare:

lsof -p <jvm pid> 

che vi darà una lista con i descrittori utilizzati dal programma associato al pid specificato.

More Info

+2

Il problema è che molte risorse possono essere caricate da un singolo file jar, che potrebbe essere aperto solo una volta. – erickson

+0

Sono d'accordo, in questo caso penso che l'opzione migliore sia quella di andare con la soluzione ClassLoader –

2

Si potrebbe utilizzare InTrace allo strumento delle classi classloader che fanno il carico.

Per il Sun JVM, vi suggerirei di usare i seguenti Includi modelli di tracciare classi appropriate:

  • ClassLoader
  • URLClassPath
  • Loader