[Haskell-cafe] Garbage collection and finalizer thread priority
Gracjan Polak
gracjan at acchsh.com
Tue Jun 14 05:29:09 EDT 2005
Simon Marlow wrote:
> On 13 June 2005 11:30, Gracjan Polak wrote:
>
>
>>My space problems continued... :)
Follow up :)
>>
>>I have some ForeignPtr's, with finalizers (finalizerFree only). And I
>>have lazyly produced list of those (yes, there is some unsafePerformIO
>>magic behind, but I think I got this right). The problem is I get
>>out-of-memory condition because elements get produced faster than
>>those consumed are garbage collected.
>>
>>Example:
>>
>>list = ...
>>mapM_ writeOut list
>>
>>writeOut :: Ptr Word8
>>writeOut dat = do
>> hPutBuh handle dat 1024
>> -- Control.Concurrent.threadDelay 1000
>>
This sould be:
writeOut :: Ptr Word8
writeOut dat = do
hPutBuh handle dat 1024
System.Mem.performGC
Control.Concurrent.threadDelay 1000
My small experimets show, that gc is not triggered?!?! What are the
conditions to trigger gc? As I read the docs, is some % of heap. Is
mallocForeinPtrBytes counted into that %?
Anyway I ended up triggering GC by hand and giving it time to run
finalizers. Frankly speaking this is nonsolution:(
Related question:
Documentation says:
-Msize
[Default: unlimited] Set the maximum heap size to size bytes. The
heap normally grows and shrinks according to the memory requirements of
the program...
GHC 6.4 says:
Heap exhausted;
Current maximum heap size is 268435456 bytes (256 Mb);
use `+RTS -M<size>' to increase it.
What am I missing?
PS: I might be mistaken in any of above statements. I'll be thankful for
any light... :)
--
Gracjan
More information about the Haskell-Cafe
mailing list