standardbiblioteken för programmeringsspråket Java ger klassen HashMap . En HashMap är en kartläggning från nycklar till värden , där nycklar och värden kan tillhöra en viss Java-klass . Bland övriga verksamheter , ger HashMap en metod för att hitta värdet associerat till en viss nyckel och lägga till och ta bort ( nyckel , värde ) par från HashMap . HashMaps är en vanlig felkälla minnesläcka i Java -program : instanser av en viss klass hanteras korrekt av koden , men ett programmeringsfel hindrar dem från att raderas från HashMap när de inte längre behövs . Eftersom det finns åtminstone en enastående hänvisning till dessa anonyma objekt kan Javas sophämtare inte kräva tillbaka deras minne , så att Java Runtime småningom tar slut heap minne . Instruktioner
1
Kör Java-applikationen med profilerare verktyget ( Hprof ) aktiveras och loggning heap -profiler . Det exakta sättet att göra detta beror på operativsystemet. Till exempel , om Linux , starta programmet enligt följande :
java - Xrunhprof : file = myLog.txt , upplag = sajter myApp
Ersätt myApp av namnet på din Java-program . Denna åkallan startar Java Virtual Machine ( JVM ) i profilering läge , . JVM skriver produktionen av profiler till fil myLog.txt
2
Gör din ansökningsprocess viss arbetsbelastning , så att föremål ( i synnerhet ) HashMaps fördelas och kasseras . Ta en ögonblicksbild av högen staten . Till exempel , om Linux , genererar Profiler en ögonblicksbild av högen state när du kör :
döda -3 jvmPID
Byt jvmPID med processen identifierare av JVM -instans som körs din ansökan . Hprof bifogar en ögonblicksbild av högen till det aktuella innehållet i filen myLog.txt .
3
Gör din ansökningsprocessen ungefär samma mängd arbetsbelastning så att fler objekt skapas och skräpsamlas . Ta en annan ögonblicksbild av högen är staten som i steg 2 .
4
Jämför de två ögonblicksbilder tagna i steg 2 och 3 . I synnerhet , titta på linjerna mellan " PLATSER BEGIN " och " PLATSER SLUT . " Identifiera de klasser vars objekt har ökat mest i antal mellan de två snapshots , de är de som ansvarar för minnesläckor , eftersom lasten behandlas av din ansökan var ungefär konstant över de två snapshots
5
Undersök . snapshots för att identifiera de delar av koden fördela objekt som inte blir befriade när det behövs . För att koncentrera sig på de rader som börjar med "spår " som har en " " händelsen på följande ögonblicksbild linjen , för alla de klasser som anges i steg 4 .
6 Inkludera saknade deletioner av hänvisningar till lektioner för de delar av koden som identifierats i steg 5. De minnesläckor inte längre hända .