mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 06:41:13 +02:00
* gc.c (scm_gc_stats): Inserted explanation of local_scm_mtrigger
etc. (scm_gc_yield_1): New variable: Holds previous yield. Used to make better judgements.
This commit is contained in:
parent
f1d316dd37
commit
37ddcaf606
1 changed files with 15 additions and 1 deletions
|
@ -42,6 +42,8 @@
|
||||||
/* Software engineering face-lift by Greg J. Badros, 11-Dec-1999,
|
/* Software engineering face-lift by Greg J. Badros, 11-Dec-1999,
|
||||||
gjb@cs.washington.edu, http://www.cs.washington.edu/homes/gjb */
|
gjb@cs.washington.edu, http://www.cs.washington.edu/homes/gjb */
|
||||||
|
|
||||||
|
/* #define DEBUGINFO */
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "_scm.h"
|
#include "_scm.h"
|
||||||
|
@ -255,6 +257,7 @@ long scm_mallocated = 0;
|
||||||
unsigned long scm_gc_cells_collected;
|
unsigned long scm_gc_cells_collected;
|
||||||
#ifdef GUILE_NEW_GC_SCHEME
|
#ifdef GUILE_NEW_GC_SCHEME
|
||||||
unsigned long scm_gc_yield;
|
unsigned long scm_gc_yield;
|
||||||
|
static unsigned long scm_gc_yield_1 = 0; /* previous GC yield */
|
||||||
#endif
|
#endif
|
||||||
unsigned long scm_gc_malloc_collected;
|
unsigned long scm_gc_malloc_collected;
|
||||||
unsigned long scm_gc_ports_collected;
|
unsigned long scm_gc_ports_collected;
|
||||||
|
@ -733,6 +736,7 @@ scm_gc_start (const char *what)
|
||||||
scm_gc_rt = SCM_INUM (scm_get_internal_run_time ());
|
scm_gc_rt = SCM_INUM (scm_get_internal_run_time ());
|
||||||
scm_gc_cells_collected = 0;
|
scm_gc_cells_collected = 0;
|
||||||
#ifdef GUILE_NEW_GC_SCHEME
|
#ifdef GUILE_NEW_GC_SCHEME
|
||||||
|
scm_gc_yield_1 = scm_gc_yield;
|
||||||
scm_gc_yield = (scm_cells_allocated
|
scm_gc_yield = (scm_cells_allocated
|
||||||
+ master_cells_allocated (&scm_master_freelist)
|
+ master_cells_allocated (&scm_master_freelist)
|
||||||
+ master_cells_allocated (&scm_master_freelist2));
|
+ master_cells_allocated (&scm_master_freelist2));
|
||||||
|
@ -800,8 +804,12 @@ adjust_gc_trigger (scm_freelist_t *freelist)
|
||||||
*/
|
*/
|
||||||
if (freelist->gc_trigger_fraction)
|
if (freelist->gc_trigger_fraction)
|
||||||
{
|
{
|
||||||
|
/* Pick largest of last two yields. */
|
||||||
|
int yield = (scm_gc_yield_1 > scm_gc_yield
|
||||||
|
? scm_gc_yield_1
|
||||||
|
: scm_gc_yield);
|
||||||
int delta = ((SCM_HEAP_SIZE * freelist->gc_trigger_fraction / 100)
|
int delta = ((SCM_HEAP_SIZE * freelist->gc_trigger_fraction / 100)
|
||||||
- scm_gc_yield);
|
- yield);
|
||||||
#ifdef DEBUGINFO
|
#ifdef DEBUGINFO
|
||||||
fprintf (stderr, " after GC = %d, delta = %d\n",
|
fprintf (stderr, " after GC = %d, delta = %d\n",
|
||||||
scm_cells_allocated,
|
scm_cells_allocated,
|
||||||
|
@ -832,6 +840,12 @@ scm_gc_for_newcell (scm_freelist_t *master, SCM *freelist)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUGINFO
|
||||||
|
fprintf (stderr, "allocated = %d, ",
|
||||||
|
scm_cells_allocated
|
||||||
|
+ master_cells_allocated (&scm_master_freelist)
|
||||||
|
+ master_cells_allocated (&scm_master_freelist2));
|
||||||
|
#endif
|
||||||
scm_igc ("cells");
|
scm_igc ("cells");
|
||||||
adjust_gc_trigger (master);
|
adjust_gc_trigger (master);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue