Le librerie standard per il linguaggio di programmazione Java forniscono la classe HashMap . Un HashMap è una mappatura da chiavi a valori, dove le chiavi ei valori possono appartenere a qualsiasi classe Java . Tra le altre operazioni , HashMap fornisce un metodo per trovare il valore associato a un dato chiave e per aggiungere e cancellare ( chiave, valore ) paia dal HashMap . HashMaps sono una comune fonte di errori di perdita di memoria in programmi Java : le istanze di una classe sono gestite correttamente dal codice , ma un errore di programmazione non ne consentono lo cancellato dalla HashMap quando non sono più necessari . Perché non vi è almeno un eccezionale riferimento a quegli oggetti orfani , Garbage Collector di Java non può recuperare la memoria , in modo che il runtime Java finalmente esaurisce la memoria heap . Istruzioni
1
eseguire l'applicazione Java con lo strumento profiler ( HPROF ) attivato e la registrazione dei profili di heap . Il modo preciso di fare questo dipende dal sistema operativo . Per esempio, su Linux , avviare l'applicazione come segue :
java - Xrunhprof : file = mylog.txt , heap = siti myApp
Replace myApp con il nome della vostra applicazione Java . Questa invocazione inizia la Java Virtual Machine ( JVM ) in modalità di profilatura , . JVM scrive l'uscita del profiler di presentare mylog.txt
2
Rendere il processo di applicazione di alcuni carichi di lavoro , in modo che gli oggetti ( in particolare , HashMaps ) vengono allocate e scartato . Prendete una fotografia dello stato heap . Per esempio, su Linux , il profiler genera un'istantanea dello stato del mucchio quando si esegue :
uccidere -3 jvmPID
Sostituire jvmPID con l'identificatore di processo dell'istanza JVM che esegue l'applicazione . HPROF aggiunge una snapshot del mucchio per il contenuto corrente del file di mylog.txt .
3
rendere il processo di applicazione o meno la stessa quantità di carico di lavoro in modo che più gli oggetti sono creati e garbage collection . Prendete un'altra istantanea dello stato del mucchio come al punto 2 .
4
Confronta le due istantanee scattate nei passi 2 e 3 . In particolare , osservare le linee tra "siti BEGIN " e " SITI END ". Identificare le classi i cui oggetti sono aumentati più di numero tra le due istantanee , quelli sono i responsabili per le perdite di memoria , come il carico elaborato dalla vostra applicazione è stata pressoché costante tra le due istantanee
5
Esaminare . le istantanee per identificare le parti del codice di assegnazione oggetti che non vengono liberati quando necessario. Per questo , concentrarsi sulle linee che iniziano con "Trace" che hanno un evento " " sulla riga seguente snapshot, per ciascuna delle classi individuate nella Fase 4 .
6 Includere il delezioni mancanti dei riferimenti alle classi di problemi per le parti del codice identificati nella Fase 5 . Le perdite di memoria non è più accadere .