Standard biblioteker for Java programmeringsspråk gi klassen HashMap . En HashMap er en kartlegging fra nøkler til verdier , hvor tastene og verdier kan tilhøre enhver Java klasse. Blant andre operasjoner , gir HashMap en metode for å finne verdien knyttet til en gitt nøkkel og å legge til og slette (key , value) parene fra HashMap . HashMaps er en vanlig kilde til minnelekkasje feil i Java-programmer : forekomster av noen klasse forvaltes riktig av koden , men en programmeringsfeil hindrer dem fra å bli slettet fra HashMap når de ikke lenger er nødvendig . Fordi det er minst en enestående referanse til de foreldreløse objekter, kan Javas garbage collector ikke gjenvinne sin hukommelse, slik at Java runtime til slutt går tom for heap minne. Instruksjoner
en
Kjør Java-program med profiler verktøyet ( Hprof ) aktivert og logging heap profiler. Den nøyaktige måten å gjøre dette avhenger av operativsystemet . For eksempel på Linux , starte programmet som følger : en
java - Xrunhprof : file = myLog.txt , heap = nettsteder MyApp
Erstatt MyApp ved navn din Java-program . Dette påkalling starter Java Virtual Machine ( JVM ) i profilering modus ; . JVM skriver utgangen av profiler til fil myLog.txt
2
Gjør din søknadsprosessen noen arbeidsmengden, slik at objekter ( i spesielt HashMaps ) fordeles og forkastet. Ta et bilde av haugen staten. For eksempel på Linux , genererer profiler et øyeblikksbilde av haugen tilstand når du utfører : en
drepe -3 jvmPID
Bytt jvmPID med prosessen identifikator av JVM forekomsten som kjører din søknad . Hprof føyer til et øyeblikksbilde av haugen til det gjeldende innholdet i filen myLog.txt .
3
Gjør din søknadsprosessen omtrent samme mengde arbeidsmengden slik at flere objekter opprettes og søppel - samlet . Ta et nytt bilde av haugen tilstand som i trinn to .
4
Sammenlign de to snapshots tatt i trinn 2 og 3 . Spesielt se på linjene mellom " NETTSIDER BEGIN " og " NETTSIDER END ". Identifiser klasser som objekter har økt mest i antall mellom de to øyeblikksbilder , de er de som er ansvarlig for minnelekkasjer , som belastning behandles av programmet var omtrent konstant over de to øyeblikksbilder
5
Undersøke . øyeblikksbilder å identifisere de delene av koden tildeling av objekter som ikke får frigjort når det trengs . For det, konsentrere seg om de linjer som begynner med "spor " som har en " " hendelse på følgende øyeblikksbilde linje, for hver av klassene identifisert i trinn 4 .
6 Inkluder manglende sletting av referanser til problemet klasser for de delene av koden som er identifisert i trinn 5 . De minnelekkasjer ikke lenger skje.