Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] Memory leak
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-04-15 (19:38)
From: Martin Jambon <m.jambon@i...>
Subject: [Caml-list] Memory leak

Is it possible that non-negligible amounts of unreachable data are never
freed by the GC?

My program seems to waste memory, even with Gc.max_overhead set to 50 (or
even 0).
What should I do?

The program is written only in OCaml.
It has been tested using version 3.04 and last friday's working version
(3.04+9 (2002-04-04)).

No dangerous feature of the language is used except Marshal, I think.
The program may sequentially handle several gigabytes of marshaled data,
but doesn't crash and always produces correct results.

Example of Gc.stat (OCaml 3.04):

minor_words: 1746668652
promoted_words: 104792423
major_words: 232260045
minor_collections: 121
major_collections: 75727
heap_words: 250683392 (* bytes *)
heap_chunks: 941
live_words: 28221788
live_blocks: 4657360
free_words: 34443371
free_blocks: 772158
largest_free: 21914
fragments: 5689
compactions: 11

In this case, the size of the heap should stay below 10 MB. Here, it is
250 MB.
Removal of some parts of the program doesn't produce expected results

Comments in module Gc say [about Gc.finalise]:
   Some constant values can be heap-allocated but never deallocated
   during the lifetime of the program, for example a list of integer
   constants; this is also implementation-dependent.

How do I know if my program uses such permanent data?
Should I use Gc.finalise to look for missing deallocations?

Hoping I will get some help...
Thanks in advance,


To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: