On Sep 11, 2008, at 12:13 AM, Josh Chia (谢任中) wrote:
I did some more research. It seems that KJS does mark-and-sweep GC,
and the marking is to mark objects that are not known to be
unreachable, so that those left unmarked can be removed at the end.
Please correct me if I'm wrong.
More specifically, it marks objects that are reachable from the root
set.
On Wed, Sep 10, 2008 at 9:23 PM, Josh
Chia (谢任中) <[EMAIL PROTECTED]> wrote:
Hi,
I'm trying to debug some memory leaks and now need to understand
what collector.{h,cpp} are doing. Could someone point me to some
documents to explain how the garbage collector works? I've also run
valgrind and it complained that CollectorBitmap::get() uses an
unreferenced value. I'm not sure whether this is really wrong, so
I'll have to first understand how the garbage collector works, the
alignment magic used with JSCell and whatever other GC magic I could
probably figure out on my own but only after staring at the code for
a long time.
We don't have detailed docs, but I can give you this overview:
The basic algorithm is mark and sweep. It's partially conservative -
it does a conservative scan of the stack for references but is exact
with respect to the heap (both its own and the C++ heap). Some of the
code may confuse valgrind but I do not believe there is actual
uninitialized access.
We arrange it so collector cells are always allocated at a multiple of
a power of two, this helps in part by making the conservative scan
cheaper.
It's really pretty straightforward in terms of algorithms, a fairly
amateur (but surprisingly effective) take on a garbage collector. In
the future we'd like to consider using a copying collector that
supports variable-sized allocations.
Regards,
Maciej
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev