[svn:parrot] r49352 - branches/generational_gc/src/gc
bacek at svn.parrot.org
bacek at svn.parrot.org
Mon Sep 27 10:23:30 UTC 2010
Author: bacek
Date: Mon Sep 27 10:23:30 2010
New Revision: 49352
URL: https://trac.parrot.org/parrot/changeset/49352
Log:
Skip older PMC in mark
Modified:
branches/generational_gc/src/gc/gc_ms2.c
Modified: branches/generational_gc/src/gc/gc_ms2.c
==============================================================================
--- branches/generational_gc/src/gc/gc_ms2.c Mon Sep 27 10:23:08 2010 (r49351)
+++ branches/generational_gc/src/gc/gc_ms2.c Mon Sep 27 10:23:30 2010 (r49352)
@@ -791,15 +791,20 @@
ASSERT_ARGS(gc_ms2_mark_pmc_header)
MarkSweep_GC *self = (MarkSweep_GC *)interp->gc_sys->gc_private;
List_Item_Header *item = Obj2LLH(pmc);
+ size_t gen = PObj_to_generation(pmc);
/* Object was already marked as grey. Or live. Or dead. Skip it */
if (PObj_is_live_or_free_TESTALL(pmc) || PObj_constant_TEST(pmc))
return;
+ /* If object too old - skip it */
+ if (gen > self->current_generation)
+ return;
+
/* mark it live */
PObj_live_SET(pmc);
- LIST_REMOVE(self->objects[PObj_to_generation(pmc)], item);
+ LIST_REMOVE(self->objects[gen], item);
LIST_APPEND(self->root_objects, item);
/* Move to young generation */
pmc->flags &= ~(PObj_GC_generation_0_FLAG | PObj_GC_generation_1_FLAG);
@@ -1140,9 +1145,16 @@
++self->gc_mark_block_level;
+ interp->gc_sys->stats.gc_mark_runs++;
/* Which generation we are going to collect? */
/* TODO Use less naive approach. E.g. count amount of allocated memory in
* older generations */
+ if (0 && interp->gc_sys->stats.gc_mark_runs % 100 == 0)
+ self->current_generation = 2;
+ else if (interp->gc_sys->stats.gc_mark_runs % 10 == 0)
+ self->current_generation = 1;
+ else
+ self->current_generation = 0;
/* Trace "roots" */
gc_ms2_mark_pmc_header(interp, PMCNULL);
@@ -1197,7 +1209,6 @@
interp->gc_sys->stats.header_allocs_since_last_collect = 0;
interp->gc_sys->stats.mem_used_last_collect = 0;
- interp->gc_sys->stats.gc_mark_runs++;
self->gc_mark_block_level--;
/* We swept all dead objects */
self->num_early_gc_PMCs = 0;
More information about the parrot-commits
mailing list