Ahoj. 

Překvapuje že po 26 letech co tu s námi Java je stále existují lidé kteří neví 
ani základy jak funguje memory management JVM. Asi trpím profesní slepotou :-)

Java si při svém startu ukousne poměrně velký kus paměti na uložení objektů 
(té paměti se říká heap). Počáteční velikost heapu se dá upravit argumentem 
-Xms (třeba -Xms1G). Jak aplikace běží, do heapu jsou ukládány "živé" objekty. 
Obsazeno z pohledu Javy mohou být jen procenta heapu. Jednou za čas se spustí 
Garbage collector, který objekty v heapu projde, najde ty které nejsou 
používány a smaže je... V okamžiku kdy je paměti málo (garbage collector není 
schopný uvolnit paměť), Java si alokovaný heap zvětší. Až do maximální 
velikosti, která je defaultně 1/4 dostupné systémové paměti, nebo 1GiB. 
To se dá nastavit argumentem -Xmx (třeba -Xmx4G).

> Kdyz stahnes jeden "ctverecek" kterej ma rekneme +- 1MB RAW dat, tak si
> josm sezere ... a prave jsem to vyzkousel, 1,3GB. Nic dalsiho krome
> nejakych pluginu nacteno neni. Zadny podklady, nic. Kdyz pod to hodim
> fotomapu a KM, tak to schroupe "jen" dalsich cca 500MB. Po donacteni
> rekneme "ridciho" okoli - zhruba stejna plocha jen mimo obec - (cca
> 200kB RAW) to prihodilo dalsich cca 200MB.
> 
> Takze se da (zhruba) rict, ze kazdy 1MB stazeny z OSM = +1GB zabrany
> ramky. (tohle opet zhruba odpovida maximalni plose kterou OSM dovoli
> jednim vrzem)

Z toho co jsem psal, dívat se na paměť Java aplikací z perspektivy co mají 
alokováno v systému je zavádějící.

> 
> IMO tech +- 300MB je vlastni apka + pluginy. Prazdny josm si mi po
> spusteni zblajzne prave 1GB, ale pocitam ze vetsina je prazdna "doforoty".

Přesně tak, jedná se o alokovaný heap, nikoliv obsazený.

> Urcite by se to dalo zjistit presne, tohle je jen velmi hrubej odhad.
> Ale je to pekelne nenazrana appka ;D.

Dá se k tomu použít například jvisualvm, který je součásti JDK (java 
development toolkit). 

Použití Javy pro desktopovou aplikaci jako JOSM není nejšťastnější, protože 
taková aplikace často neběží v systému sama a jde těžko předem přidělit 
systémové prostředky... Obecně je vhodné Javě poskytnout dostatek paměti. 
časté spouštění garbage collectoru je výpočetně náročné a aplikace se pak 
"seká". Zároveň ale né tolik aby systém nezačal swapovat.

S pozdravem, Lukáš

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
talk-cz mailing list
talk-cz@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-cz
https://openstreetmap.cz/talkcz

Odpovedet emailem