De standaard bibliotheken voor de programmeertaal Java bieden de klasse HashMap . Een HashMap is een mapping van de toetsen om waarden , waar de sleutels en waarden kunnen behoren tot een bepaalde Java-klasse . Onder andere handelingen HashMap een werkwijze voor de waarde die een bepaalde sleutel te vinden en paren toevoegen en verwijderen ( key , value ) van de HashMap . HashMaps zijn een gemeenschappelijke bron van geheugenlek fouten in Java-programma's : exemplaren van een klasse correct worden beheerd door de code , maar een programmeerfout voorkomt dat ze uit de HashMap worden verwijderd wanneer ze niet langer nodig zijn . Want er is ten minste een uitstekende verwijzing naar die wees objecten , kan Java garbage collector hun geheugen niet terugvorderen , zodat de Java runtime uiteindelijk opraakt heap geheugen . Instructies 1 Uitvoeren van de Java- applicatie met de profiler gereedschap ( hprof ) geactiveerd en logging heap profielen . De nauwkeurige manier om dit te doen is afhankelijk van het besturingssysteem . Bijvoorbeeld , op Linux , start de applicatie als volgt : java - Xrunhprof : file = myLog.txt , heap = plaatsen myApp Replace myApp door de naam van uw Java-toepassing . Deze aanroeping begint de Java Virtual Machine ( JVM ) in het profileren modus ; . De JVM schrijft de uitvoer van de profiler om myLog.txt bestand kopen van 2 Maak uw aanvraagprocedure sommige werklast , zodat objecten ( in name HashMaps ) worden toegewezen en weggegooid . Neem een momentopname van de heap staat . Bijvoorbeeld , op Linux , de profiler genereert een momentopname van de staat van de heap 's wanneer u uitvoert : doden -3 jvmPID Vervang jvmPID met het proces -id van de instantie JVM waarop uw toepassing . Hprof voegt een momentopname van de hoop om de huidige inhoud van het bestand myLog.txt . 3 Maak uw aanvraag proces ongeveer dezelfde hoeveelheid werklast zodat meer objecten worden gemaakt en opgeschoond . Neem nog een momentopname van de staat van de hoop als in stap 2 . 4 Vergelijk de twee snapshots genomen in de stappen 2 en 3 . In het bijzonder kijken naar de lijnen tussen " WEBSITES BEGIN " en " WEBSITES END . " Identificeer de klassen waarvan de objecten zijn het meest in aantal zijn toegenomen tussen de twee snapshots , dat zijn degenen die verantwoordelijk zijn voor het geheugen lekken , als de belasting verwerkt door uw toepassing was ongeveer constant over de twee snapshots 5 Onderzoek . de snapshots naar de delen van de code toewijzen van objecten die niet bevrijd raken wanneer nodig te identificeren . Daarvoor concentreren op de lijnen die beginnen met " TRACE " waarbij " " event de volgende snapshot regel hebben voor elk van de klassen die in stap 4 . 6 omvatten de ontbrekende schrappingen van verwijzingen naar het probleem klassen voor het delen van je code die in stap 5 . Het geheugen lekken niet meer gebeuren .
|