Zobrazování spotřeby paměti aplikace je opravdu tvrdý oříšek a ten kdo nerozumí jak to funguje z toho může udělat šílené závěry.
1) Vlákna sdílí jeden adresový prostor. Některé zobrazovače ale evidují paměť pro každé vlákno i když vlastně všichni sdílej jednu paměť
2) Virtuální paměť v linuxu je pouze rezervovaný adresový prostor, kde nic nemusí být. Paměť se zabere až při prvním zápisu do vyhrazené paměťi. Ve Windows je to stejné, akorát aplikace explicitně deklaruje dopředu, že hodlá zapsat do rezervované stránky (udělá její commit)
3) Často se paměť sdílí i mezi procesy. Zvlášť naforkované děti, namapované knihovny, které jsou v paměti jen 1x, ale jsou namapované do každého procesu a protože každý proces vidí jen sám sebe, vypadá to, že ta knihovna je tam rozkopírovaná xkrát.
4) Tzv. working set (linux RES) je paměť přidělená aktuálnímu procesu, která může být větší, než její skutečná potřeba. Jsou v tom i různé cache operačního systému, diskové cache, paměť obrazovky atd. Například ve Windows je working set větší,pokud aplikace používá okna, GUI, atd. Při minimalizaci okna se working set zpravidla zmenší. Pokud část paměti leží ve swapu, představuje working set objem paměti fyzicky zabrané RAM včetně mapovaných souborů a knihoven + paměť operačního systému nutnou k jeho řízení + výše zmíněné cache, gui objekty, okna atd (třeba i buffery rour)
5) Asi nejblíže skutečné potřebě aplikace je "potvrzená" / committed memory, což jsou stránky, které leží buď v paměti, nebo ve swapu. Na linuxu jsem to číslo nikde nenašel
Posoudit, která aplikace zabírá kolik místa je dost problematické. Asi nejlepší je se na to dívat globálně. Mám zabráno X, volno Y, cache Z. Cílem je samozřejmě volnou paměť věnovat cache. Takto zabranou paměť je možné kdykoliv uvolnit pro potřeby aplikací