Domanda

Scrivere un profilo Implementerei anche il tipico compito di profilazione del mucchio. In particolare vorrei tracciare, quale thread ha assegnato quanti dati? Usando jvmti ho pensato che fosse sufficiente agganciare agli eventi Allocazione degli oggetti VM e Oggetto libero. Purtroppo ho letto che il primo evento non è attivato a causa delle chiamate fatte a new.

L'ultima idea che ho avuto è stata controllare l'evento Metodoxit Se il suo nome è <init> e quindi dichiarare questa chiamata come un'allocazione degli oggetti. Tuttavia, all'interno di questo evento non riesco a ottenere l'oggetto e quindi non posso invocare GetObjectSize.

Semplicemente iterato sul heap, non ha informazioni su quale oggetto è stato assegnato da quale thread. Qualcuno ha un'idea di come implementarlo?

È stato utile?

Soluzione

C'è qualche motivo per cui non puoi chiamare GetObjectSize dal MethodEntry Evento per un costruttore?

Se sei interessato a eseguire il codice prima che un metodo torni, puoi ascoltare il MethodEntry evento, e se il metodo viene nominato <init>, Puoi chiamare NotifyFramePop per ascoltare il FramePop Evento per il frame corrente. Questo evento è simile al MethodExit evento, ma si verifica prima che il metodo ritorni in modo da poter comunque ottenere il this oggetto.

Altri suggerimenti

Una rapida occhiata all'implementazione _New dell'hotspot VM (templateTable_x86_64.cpp) sembra indicare che _new non offre alcun gancio per jvmti (nemmeno nel caso lento sembra). Quindi, se il tuo trucco non funziona, non vedo altre possibilità, ma non sono affatto un esperto di JVMTI.

Presumo che compilare la tua VM hotspot con una piccola patch non sia particolarmente utile per te?

Questo demo di heaptracker Ti illustra come tracciare tutti gli oggetti nel mucchio. Perché il Evento VMObjectAlloc viene inviato solo quando si verifica la riflessione, la demo utilizza bytecodeInstrument per tracciare la nuova allocazione degli oggetti.


È possibile utilizzare la funzione getCurrentThread per sapere a quale thread è l'oggetto appartenente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top