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