/ / Veľmi veľká veľkosť haldy, ale malá použitá pamäť - java, pamäť, zber odpadu, halda

Veľká veľkosť haldy, ale malá použitá pamäť - java, pamäť, zber odpadu, halda

V mojej aplikácii vidím veľmi veľkú haldu, ale použitá pamäť je veľmi malá:

Veľkosť haldy: 10 GB +, Využitá pamäť: 500 MB

Čo to vysvetľuje? Prečo sa neznižuje veľkosť haldy. Graf pamäte http://i48.tinypic.com/b5423a.png

Moje parametre pamäte java sú nasledujúce:

-Xms8448m -Xmx12544m -XX: PermSize = 192m -XX: MaxPermSize = 256M -XX: + UseConcMarkSweepGC -XX: CMSInitiatingOccupancyFraction = 60

Prosím radu, prečo toto čudné správanie. Vidím použitú pamäť ako odpadky zhromaždené v grafe, ale čo je zle s Heap Memory ????

odpovede:

5 pre odpoveď č. 1

Počiatočná veľkosť haldy z vášho argumentu

-Xms8448m

je nad 8 GB. Tiež

-Xmx12544m

dáva JVM povolenie nechať to prerásť12 GB a mohlo by to urobiť a nikdy ho neuvoľniť, ak je k dispozícii pamäť a zdá sa, že je najlepšia veľkosť haldy, ktorú si môžete uchovať. V špecifikáciách jednoducho nie je nič, čo by tvrdilo, že by sa mal JVM pokúsiť udržať veľkosť haldy malú.


2 pre odpoveď č. 2

Veľkosť haldy v HotSpot JVM nikdy neklesá. Hoci niektoré algoritmy GC môžu dať pamäť späť OS. Ale v neskoršom prípade vám JConsole neukáže redukciu pamäte (v JConsole vidíte rozsah adresného priestoru vyhradený pre haldu), mali by ste použiť monitorovanie procesnej pamäte OS, aby ste videli, že JVM skutočne uvoľňuje pamäť.

Algoritmy, ktoré by mohli poskytnúť nevyužitú pamäť späť OS, sú

  • sériový zberač (-XX: + UseSerialGC)
  • G1 (-XX: + UseG1GC)

0 pre odpoveď č. 3

Zadávate počiatočnú veľkosť haldy, ktorá má byť ~ 8,5 GB -Xms8448m, Niektoré implementácie javy nepodporujú skutočné zmenšenie haldy (často kvôli systémovým obmedzeniam). Znížte túto hodnotu pre menšiu počiatočnú haldu.


0 pre odpoveď č. 4

Odstráňte vyššie uvedené -Xms8448m. Určuje počiatočnú veľkosť haldy. Ak ho odstránite, malo by to fungovať podľa očakávania.


0 pre odpoveď č. 5

JVM si vyhradzuje maximálnu veľkosť haldy pri spustení ako virtuálnu pamäť. Koľko z tejto pamäte je hlavná pamäť závisí od toho, koľko sa používa.

Ak nastavíte minimálnu pamäť, nezaručuje sa, že sa použije, ale robí iba minimálne pokusy obmedziť využitie pamäte až do tohto bodu.

ale prečo je Heap Size na takmer 12 GB?

Takto ste to nastavili.