Standard biblioteker til programmeringssproget Java giver klassen HashMap . En HashMap er en kortlægning fra nøgler til værdier , hvor nøgler og værdier kan tilhører en given Java-klasse . Blandt andre operationer , giver HashMap en metode til at finde værdien forbundet med en given nøgle og tilføje og slette (nøgle , værdi) par fra HashMap . HashMaps er en almindelig kilde til hukommelsesfejl fejl i Java-programmer : forekomster af nogle klasse styres korrekt af kode, men en programmeringsfejl forhindrer dem i at blive slettet fra HashMap , når de ikke længere er nødvendige . Fordi der er mindst én udestående henvisning til disse sjældne genstande , kan Java affaldsindsamling ikke genvinde deres hukommelse , så Java runtime sidste ende løber ud af bunke hukommelse . Instruktioner
1
Udfør Java-program med profiler værktøj ( Hprof ) aktiveret og logning dynge profiler. Den præcise måde at gøre dette afhænger af operativsystemet. For eksempel, på Linux starte programmet som følger : Hej
java - Xrunhprof : file = myLog.txt , heap = sites mitpgm
Erstat mitpgm ved navnet på din Java-program. Denne påkaldelse starter Java Virtual Machine (JVM ) i profilering mode; . JVM skriver output af profiler til at indgive myLog.txt
2
Gør din ansøgningsproces nogle arbejdsbyrde , således at objekter ( i især HashMaps ) allokeres og kasseres. Tage et snapshot af den bunke stat. For eksempel, på Linux profileren genererer et øjebliksbillede af heap s tilstand, når du udfører : Hej
dræbe -3 jvmPID
Udskift jvmPID med processen identifikator for JVM instans , der kører din ansøgning . Hprof føjer et snapshot af bunken til det aktuelle indhold af filen myLog.txt .
3
Gør din ansøgningsproces nogenlunde den samme mængde arbejdsbyrde , således at flere objekter oprettes og skrald - indsamlede . Tag endnu øjebliksbillede af heap s tilstand som i trin 2 .
4
Sammenlign de to snapshots taget i trin 2 og 3 . Især ser på linierne mellem " STEDER BEGIN " og " STEDER END ". Identificer de klasser , hvis objekter er steget mest i antal mellem de to øjebliksbilleder , det er dem , der er ansvarlige for memory leaks , da belastningen behandles af din ansøgning var nogenlunde konstant på tværs af de to øjebliksbilleder
5.
Undersøg . snapshots til at identificere de dele af koden tildeling objekter, der ikke får befriet efter behov. For at koncentrere sig om de linjer, der begynder med " TRACE " , der har en " " begivenhed på den følgende snapshot linje, for hver af de klasser, er identificeret i trin 4. .
6 Medtag manglende sletninger af referencer til problemet klasser for de dele af din kode er identificeret i trin 5 . De memory leaks ikke længere ske.