Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

HashMap : Ako odstrániť príčinu pretečeniu pamäte

štandardné knižnice pre programovací jazyk Java poskytuje triedy HashMap . HashMap je mapovanie z kľúčov k hodnotám , kde sú kľúče a hodnoty môžu patriť ku ktorémukoľvek danej triedy Java . Medzi ďalšie činnosti , HashMap poskytuje spôsob , ako nájsť hodnotu priradenú k danému kľúču a pridávať a mazať ( kľúč , hodnota ) pary z HashMap . HashMaps sú bežným zdrojom chýb pretečeniu pamäte v programe Java : inštancie nejakej triedy sú riadené správne kódu , ale programovacie chyba zabraňuje ich vymazaná z HashMap , kedy už nie sú potrebné . Vzhľadom k tomu , že je aspoň jeden vynikajúci referencie na týchto osirelých objektov , môže Java garbage collector nie je kultivovať svoje pamäti , takže Java runtime nakoniec vyčerpá pamäte haldy . Pokyny dovolená 1

Spustite aplikáciu Java s profiler nástroj ( Hprof ) aktívneho a zaznamenávať haldy profilov . Presný spôsob , ako to dosiahnuť , závisí na operačnom systéme . Napríklad na Linux , spustite aplikáciu :

java - Xrunhprof : file = myLog.txt , haldy = miesta myapp

Vymeňte myapp menom vašej Java aplikácie . Tento vyvolanie spustí Java Virtual Machine ( JVM ) v režime profilovanie ; . JVM zapíše výstup profiler podať myLog.txt
2

Urob si svoj ​​spôsob aplikácie nejakú záťaž , takže objekty ( v najmä HashMaps ) sú pridelené a zlikvidovať . Urobte si prehľad o stave haldy . Napríklad na Linuxe , profiler generuje snímku stavu haldy , keď spustenie :

zabiť -3 jvmPID

Vymeňte jvmPID s identifikátorom procesu inštancie JVM , ktorý je spustený vaše aplikácie . Hprof pripojí snímku haldy na aktuálny obsah súboru myLog.txt .
3

Urob si svoj ​​spôsob aplikácie zhruba rovnaké množstvo záťaže tak , aby viac objekty sú vytvárané a garbage collector . Vezmite si ďalšiu snímku stavu haldy ako v kroku 2.
4

Porovnajte dve snímky zhotovené v krokoch 2 a 3. Najmä sa pozrieť na linkách medzi " POZEMKY BEGIN " a " POZEMKY END . " Identifikovať tried, ktorých objekty sa zvýšili najviac v počte medzi dvoma snímkami , ktoré sú zodpovední za úniky pamäte , pretože zaťaženie spracovávané aplikácií bol približne na rovnakej úrovni po dvoch snímok
5

Prezrite . sa snímky na identifikáciu častí objektov kódu prideľovanie že nechápem uvoľnených v prípade potreby . Za to , že sa sústredí na riadkoch začínajúcich " TRACE " , ktoré majú " " udalosť na nasledujúcu snímku linky , pre každú z tried uvedených v kroku 4.
6

Zahrnúť chýba odstránenie odkazov na problémové triedy pre časti kódu zistených v kroku 5. Pamäťové úniku už nestane .

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené