pinned byte arrays
Bulat Ziganshin
bulat.ziganshin at gmail.com
Wed Oct 18 11:50:00 EDT 2006
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)
then, i thought that using pinned byte arrays should significantly
improve memory usage because these arrays can't be moved around and
therefore, i thought, these arrays will not be involved in GC. amount
of data which should be compacted by GC will decrease and amount of
memory wasted by GC should also decrease
so i replaced in my packed str lib newByteArray# with
newPinnedByteArray# and seen the following:
53,629,344 bytes maximum residency (14 sample(s))
2904 collections in generation 0 ( 6.97s)
14 collections in generation 1 ( 13.16s)
100 Mb total memory in use
why? why memory usage was increased? why another 47 megs is just
wasted out? how GC works with pinned byte arrays? and why GC times was
almost the same - i thought that GC for pinned data should be very
different than GC for unpinned byte arrays
--
Best regards,
Bulat mailto:Bulat.Ziganshin at gmail.com
More information about the Glasgow-haskell-users
mailing list