From f8c8159362f4bb8820908085adcb06900ef33b4c Mon Sep 17 00:00:00 2001 From: Waldemar Celes Date: Mon, 17 Oct 1994 17:03:23 -0200 Subject: [PATCH] adaptative garbage collection. --- hash.c | 7 ++++--- table.c | 13 ++++++++----- table.h | 3 ++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/hash.c b/hash.c index 916a0d43..97d6efb0 100644 --- a/hash.c +++ b/hash.c @@ -3,7 +3,7 @@ ** hash manager for lua */ -char *rcs_hash="$Id: hash.c,v 2.7 1994/09/08 15:27:10 celes Exp celes $"; +char *rcs_hash="$Id: hash.c,v 2.8 1994/10/11 12:59:49 celes Exp $"; #include #include @@ -52,7 +52,7 @@ static int redimension (int nhash) return nhash*2+1; } -static int index (Hash *t, Object *ref) /* hash function */ +static int hashindex (Hash *t, Object *ref) /* hash function */ { switch (tag(ref)) { @@ -97,7 +97,7 @@ static int equalObj (Object *t1, Object *t2) static int present (Hash *t, Object *ref) { - int h = index(t, ref); + int h = hashindex(t, ref); if (h < 0) return h; while (tag(ref(node(t, h))) != T_NIL) { @@ -195,6 +195,7 @@ void lua_hashcollector (void) if (prev == NULL) listhead = next; else prev->next = next; hashdelete(curr_array); + ++lua_recovered; } else { diff --git a/table.c b/table.c index 9ea24226..875a6e20 100644 --- a/table.c +++ b/table.c @@ -3,7 +3,7 @@ ** Module to control static tables */ -char *rcs_table="$Id: table.c,v 2.2 1994/07/19 21:27:18 celes Exp celes $"; +char *rcs_table="$Id: table.c,v 2.3 1994/08/03 14:15:46 celes Exp $"; #include #include @@ -39,6 +39,7 @@ int lua_nfile; #define GARBAGE_BLOCK 256 Word lua_block=GARBAGE_BLOCK; /* when garbage collector will be called */ Word lua_nentity; /* counter of new entities (strings and arrays) */ +Word lua_recovered; /* counter of recovered entities (strings and arrays) */ /* @@ -210,10 +211,15 @@ void lua_pack (void) /* mark symbol table strings */ lua_travsymbol(lua_markobject); + lua_recovered=0; + lua_strcollector(); lua_hashcollector(); - lua_nentity = 0; /* reset counter */ +printf("lua_pack: lua_block=%d lua_recovered=%d %%=%.2f\n",lua_block,lua_recovered,100.0*lua_recovered/lua_block); + + lua_nentity = 0; /* reset counter */ + lua_block=2*lua_block-3*lua_recovered/2; /* adapt block size */ } @@ -224,9 +230,6 @@ char *lua_createstring (char *s) { if (s == NULL) return NULL; - if (lua_nentity == lua_block) - lua_pack (); - lua_nentity++; return lua_strcreate(s); } diff --git a/table.h b/table.h index 47be08c4..2ef50b0a 100644 --- a/table.h +++ b/table.h @@ -1,7 +1,7 @@ /* ** Module to control static tables ** TeCGraf - PUC-Rio -** $Id: table.h,v 2.1 1994/04/20 22:07:57 celes Exp celes $ +** $Id: table.h,v 2.2 1994/07/19 21:27:18 celes Exp $ */ #ifndef table_h @@ -15,6 +15,7 @@ extern int lua_nfile; extern Word lua_block; extern Word lua_nentity; +extern Word lua_recovered; void lua_initconstant (void);