better GC triggering for bitmap allocation
svn: r1037
This commit is contained in:
parent
ff430e189d
commit
12376454a3
|
@ -315,6 +315,14 @@ char *gc::gcGetName() {
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
||||||
|
/* The accounting shadow serves two purposes. First, it allocates
|
||||||
|
largely untouched atomic memory to reflect the allocation of
|
||||||
|
bitmaps outside the GC space, so that the nominal allocation total
|
||||||
|
is related to the total taking into accoun bitmaps. Second, because
|
||||||
|
bitmaps are released through finalizers, the accounting shadow
|
||||||
|
forces a GC more frequently than might otherwise happen as the
|
||||||
|
total size of bitmaps grows. */
|
||||||
|
|
||||||
static long total, accum = 1024 * 1024 * 5;
|
static long total, accum = 1024 * 1024 * 5;
|
||||||
|
|
||||||
void *GC_malloc_accounting_shadow(long a)
|
void *GC_malloc_accounting_shadow(long a)
|
||||||
|
@ -326,7 +334,7 @@ void *GC_malloc_accounting_shadow(long a)
|
||||||
accum -= a;
|
accum -= a;
|
||||||
if (accum <= 0) {
|
if (accum <= 0) {
|
||||||
GC_gcollect();
|
GC_gcollect();
|
||||||
accum = total >> 2;
|
accum = total >> 1;
|
||||||
}
|
}
|
||||||
p = (long *)GC_malloc_atomic(a);
|
p = (long *)GC_malloc_atomic(a);
|
||||||
*p = a;
|
*p = a;
|
||||||
|
@ -335,6 +343,8 @@ void *GC_malloc_accounting_shadow(long a)
|
||||||
|
|
||||||
void GC_free_accounting_shadow(void *p)
|
void GC_free_accounting_shadow(void *p)
|
||||||
{
|
{
|
||||||
if (p)
|
if (p) {
|
||||||
total -= *(long *)p;
|
total -= *(long *)p;
|
||||||
|
accum += *(long *)p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user