2013-06-10 8 views
7

Sto cercando di ottimizzare l'utilizzo della memoria della mia applicazione. Sfortunatamente, l'esecuzione della mia applicazione con -Dcom.sun.management.jmxremote e la connessione tramite VisualVM ha un impatto piuttosto grande sull'utilizzo dell'heap. All'inizio ho pensato che fosse il mio problema applicativo, fino a quando ho scritto un programma molto semplice per confermare che è davvero il sovraccarico di JMX. Di seguito l'immagine dell'attività.Come ridurre l'impatto sull'utilizzo dell'heap da VisualVM?

Dopo aver letto this, sono giunto alla conclusione che ciò è dovuto al modo in cui VisualVM recupera i dati, ovvero eseguendo il polling dell'applicazione in modo continuo. L'ho confermato osservando il campionatore di memoria di VisualVM. Il thread RMI TCP Connection (n) sta allocando 180kb/secondo.

La mia domanda è, c'è un modo per ridurre l'impatto sull'utilizzo dell'heap di VisualVM? La modifica dell'intervallo di polling potrebbe non essere preferibile in quanto sono interessato alle informazioni dell'heap. Se questo non è possibile, possiamo escludere i dati utilizzati per VisualVM? Almeno voglio concentrarmi maggiormente sulla mia applicazione.

codice in esecuzione

Object object = new Object(); 
synchronized (object) { 
    object.wait(); 
} 

attività Monitor di heap del VisualVM

enter image description here

+0

Hai provato la tua mano al registratore Java Flight, ha un sovraccarico di memoria molto basso? Viene fornito con JDK 7 e sopra –

risposta

3

La cosa più semplice da fare è quello di ridurre l'intervallo di polling. L'impatto è proporzionale alla velocità per ottenere i dati.

Quello che faccio è usare YourKit che fa tutto nella memoria nativa, quindi non ha alcun impatto sull'heap.