Re: [Gc] Is there a way to walk the entire heap of live obj ects

Ivan Maidanski <ivmai-JGs/[email protected]> Fri, 06 Jun 2014 11:14:13 +0400
Newsgroups gmane.comp.programming.garbage-collection.boehmgc,gmane.spam.detected
Message-ID <[email protected]>
Hi,
I think we it would be good to add such an Api to upstream
--
Friday, 06 Jun 2014., 08:16 +04:00 from Peter Wang <[email protected]>:
On Thu, 05 Jun 2014 07:57:53 -0400, Christian Schafmeister < [email protected] > wrote:
> Hi there,
>
> Is there any functionality in the Boehm GC that would allow me to
> freeze the garbage collector and walk the heap of live objects?    I’d
> like to take an inventory of all of the live objects to determine the
> source of my current memory problems (30 GB of virtual memory used
> after 4 hours of runtime).
Hi,
We do something like that in the Mercury project using the following
function.
I am not an expert on Boehm GC internals, and the code is only used in a
special memory profiling grade, so not heavily exercised.
Please let me know if there is something wrong with it.
Peter
(in reclaim.c)
STATIC void GC_mercury_do_enumerate_reachable_objects(struct hblk *hbp,
    word dummy)
{
    struct hblkhdr * hhdr = HDR(hbp);
    size_t sz = hhdr -> hb_sz;
    size_t bit_no;
    char *p, *plim;
    if (GC_block_empty(hhdr)) {
        return;
    }
    p = hbp->hb_body;
    bit_no = 0;
    if (sz > MAXOBJBYTES) { /* one big object */
        plim = p;
    } else {
        plim = hbp->hb_body + HBLKSIZE - sz;
    }
    /* Go through all words in block. */
    while (p <= plim) {
        if (mark_bit_from_hdr(hhdr, bit_no)) {
            GC_mercury_callback_reachable_object((GC_word *)p,
BYTES_TO_WORDS(sz));
        }
        bit_no += MARK_BIT_OFFSET(sz);
        p += sz;
    }
}
GC_INNER void GC_mercury_enumerate_reachable_objects(void)
{
    GC_ASSERT(GC_mercury_callback_reachable_object);
    GC_apply_to_all_blocks(GC_mercury_do_enumerate_reachable_objects, (word)0);
}
_______________________________________________
bdwgc mailing list
[email protected]
https://lists.opendylan.org/mailman/listinfo/bdwgc

_______________________________________________
bdwgc mailing list
[email protected]
https://lists.opendylan.org/mailman/listinfo/bdwgc