Sto esplorando l'utilizzo della memoria in Java per capire perché il mio programma perde memoria. Dopo aver rimosso il codice nel mio ciclo principale, continuo a ottenere un aumento dell'utilizzo della memoria nel tempo. Riflettendo l'utilizzo della memoria di un programma vuoto:Perché un programma Java vuoto consuma memoria?
class Nothing
{ public static void main(String[] args)
{ while(true); }
}
ho ancora visto un aumento della memoria:
Quindi la mia domanda è: perché c'è ancora un modello di dente di sega? Perché quando gC esegue non salva tutta la memoria (ogni volta che gc gira (le valli) la memoria utilizzata aumenta di 10-20Kb (rispetto alla precedente valle))?
EDIT:
versione java "1.6.0_29"
Java (TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot (TM) Cliente VM (costruire 20.4-b02, modalità mista, condivisione)
OS: Windows 7 Enterprise-32 bit
Non vedo un aumento. Il ricordo sale, poi si accumula.Sembra che la memoria massima utilizzata sia costante nel tempo. –
Ancora un altro strumento per cercare di trovare perdite di memoria nella tua applicazione è [Plumbr] (http://plumbr.eu). Dovrebbe essere molto più facile che lottare con i profiler e cercare di dedurre qualcosa da tutte quelle informazioni. – Nikem