pinned byte arrays

Simon Marlow simonmarhaskell at
Fri Oct 20 05:44:17 EDT 2006

Bulat Ziganshin wrote:
> Hello glasgow-haskell-users,
> i have program that holds in memory a lot of strings (filenames) and
> use my own packed-string library to represent these string. this
> library uses newByteArray# to allocate strings. in my benchmark run
> (with 300.000 filenames in memory) program prints the following
> statistics:
>  37,502,956 bytes maximum residency (16 sample(s))
>        2928 collections in generation 0 (  6.90s)
>          16 collections in generation 1 ( 12.20s)
>          65 Mb total memory in use
> most of this memory occupied by filenames. note that 28 mb of memory
> is used just for GC procedure (i use compacting GC)

No, that 65Mb is just what the heap grew to before it was collected.  The 
compacting GC has very little overhead: just room for the mark bits (1/32 or 
1/64 of the heap size) and a few blocks for the mark stack.

You can make the size of the heap much closer to the size of the live data by 
fiddling with +RTS -F, but then you'll end up doing a lot more GC.


More information about the Glasgow-haskell-users mailing list