[svn:parrot] r47371 - branches/gc_massacre/src/gc
bacek at svn.parrot.org
bacek at svn.parrot.org
Sat Jun 5 00:49:42 UTC 2010
Author: bacek
Date: Sat Jun 5 00:49:42 2010
New Revision: 47371
URL: https://trac.parrot.org/parrot/changeset/47371
Log:
Sligtly optimize allocation strategy.
Modified:
branches/gc_massacre/src/gc/gc_ms2.c
Modified: branches/gc_massacre/src/gc/gc_ms2.c
==============================================================================
--- branches/gc_massacre/src/gc/gc_ms2.c Sat Jun 5 00:22:20 2010 (r47370)
+++ branches/gc_massacre/src/gc/gc_ms2.c Sat Jun 5 00:49:42 2010 (r47371)
@@ -30,6 +30,9 @@
struct Pool_Allocator *string_allocator;
struct Linked_List *strings;
+ /* Number of allocated objects before trigger gc */
+ size_t gc_theshold;
+
/** statistics for GC **/
size_t gc_mark_runs; /* Number of times we've done a mark run */
size_t gc_lazy_mark_runs; /* Number of successful lazy mark runs */
@@ -600,6 +603,8 @@
sizeof (List_Item_Header) + sizeof (STRING));
self->strings = Parrot_gc_allocate_linked_list(interp);
+ /* Arbitary number */
+ self->gc_theshold = 4096 * 10;
}
interp->gc_sys->gc_private = self;
}
@@ -615,7 +620,8 @@
PMC *ret;
/* Invoke M&S early. Freshly allocated "header" isn't header yet */
- if (++self->header_allocs_since_last_collect > 1024) {
+ if ((++self->header_allocs_since_last_collect > self->gc_theshold)
+ && self->pmc_allocator->num_free_objects <= 1) {
gc_ms2_mark_and_sweep(interp, 0);
}
@@ -716,7 +722,8 @@
List_Item_Header *ptr;
STRING *ret;
- if (++self->header_allocs_since_last_collect > 1024) {
+ if ((++self->header_allocs_since_last_collect > self->gc_theshold)
+ && self->string_allocator->num_free_objects <= 1) {
gc_ms2_mark_and_sweep(interp, 0);
}
@@ -820,6 +827,9 @@
gc_ms2_sweep_pool(interp, self->pmc_allocator, self->objects, gc_ms2_sweep_pmc_cb);
gc_ms2_sweep_pool(interp, self->string_allocator, self->strings, gc_ms2_sweep_string_cb);
+ /* Wait more next time */
+ self->gc_theshold *= UNITS_PER_ALLOC_GROWTH_FACTOR;
+
self->header_allocs_since_last_collect = 0;
self->gc_mark_block_level--;
self->gc_mark_runs++;
More information about the parrot-commits
mailing list