[Haskell-cafe] help optimizing memory usage for a program
Bulat Ziganshin
bulat.ziganshin at gmail.com
Mon Mar 2 11:14:35 EST 2009
Hello Manlio,
Monday, March 2, 2009, 6:30:51 PM, you wrote:
> The process-data-1 program parse the entire dataset using about 1.4 GB
> of memory (3x increment).
> This is strange.
> The memory required is proportional to the number of ratings.
> It may be IntMap the culprit, or the garbage collector than does not
> release the memory to the operating system (or, worse, does not
> deallocate all used temporary memory).
ghc has 2 garbage collectors. first is copying, usied by default
(because it's faster): when previously allocated memory block
overflows, it collects used data by copying them into *new* data block
allocated from OS and then use old data block to satisfy further
memory requests.
let's calculate. if at GC moment your program has allocated 100 mb of
memory and only 50 mb was not a garbage, then memory usage will be 150
mb
another GC is compacting one - it's about 2x slower, but collects data
in-place. moreover, you may set up"growing factor". with a g.f. of
1.5, for example, memory will be collected once heap will become 1.5x
larger than real memory usage after last GC. this effectively
guarantees that memory overhead will never be over this factor
look at GHC manual, RTS switches section. and last - GHC never returns
memory to the OS, there should be ticket on this
--
Best regards,
Bulat mailto:Bulat.Ziganshin at gmail.com
More information about the Haskell-Cafe
mailing list