I thread Java sono le componenti primarie di qualsiasi applicazione scritta in Java, perchè rappresentano i flussi di istruzioni -concorrenti- che costituiscono l'esecuzione del programma.
Le API Java non consentono tuttavia di recuperare nessuna informazione sul consumo di CPU o di risorse di comunicazione (socket e file) da parte di ciascun thread. Analogamente, non è possibile sapere il consumo di memoria imputabile ad un singolo oggetto Java (non esiste un operatore sizeof
come nel C), per il fatto che la JVM è una macchina totalmente astratta, e ogni implementazione porebbe gestire la memoria in modo diverso.
Per superare queste difficolta si ricorre all'interfaccia JVMPI (JVM Profiler Interface), che definisce un protocollo di comunicazione tra la JVM e un gestore di eventi detto Profiler.
Questo profiler non è altro che un modulo eseguibile, caricato sottoforma di DLL, che riceve direttamente dalla JVM degli eventi predefiniti riguardanti il funzionamento interno della macchina virtuale (qualsiasi implementazione).
In particolare è possibile ricevere notifica delle seguento situazioni:
synchronized
;
Sfruttando la semantica degli eventi comunicati dalla JVM, un Profiler può facilmente costruire un proprio database interno che, istante per istante, rifletta lo stato interno dei thread, delle classi e degli oggetti Java attivi.
Le informazioni disponibili sono:
synchronized
.