[sgen] Reinstate old M&S section reserve.
authorMark Probst <mark.probst@gmail.com>
Tue, 24 Feb 2015 20:32:31 +0000 (12:32 -0800)
committerMark Probst <mark.probst@gmail.com>
Thu, 2 Apr 2015 23:41:31 +0000 (16:41 -0700)
mono/metadata/sgen-gc.h
mono/metadata/sgen-marksweep.c
mono/metadata/sgen-memory-governor.c

index e2bf06b866b8b9e08138e289b3d9d08dbd01c2c9..c157e5257e8fefd4cfbf2fce943754ea55e6c4f4 100644 (file)
@@ -690,7 +690,7 @@ struct _SgenMajorCollector {
        void (*sweep) (void);
        gboolean (*have_swept) (void);
        void (*finish_sweeping) (void);
-       void (*free_swept_blocks) (void);
+       void (*free_swept_blocks) (size_t allowance);
        void (*check_scan_starts) (void);
        void (*dump_heap) (FILE *heap_dump_file);
        gint64 (*get_used_size) (void);
index d35f12b58762e4322798c2a956f33257b7dc3db7..c4afba2e5d0d6127e670ac8e077ae993106c67c8 100644 (file)
@@ -1810,10 +1810,10 @@ compare_pointers (const void *va, const void *vb) {
  * This is called with sweep completed and the world stopped.
  */
 static void
-major_free_swept_blocks (void)
+major_free_swept_blocks (size_t allowance)
 {
-       /* FIXME: use something sensible here. */
-       size_t section_reserve = DEFAULT_NURSERY_SIZE * 2 / MS_BLOCK_SIZE;
+       /* FIXME: This is probably too much.  It's assuming all objects are small. */
+       size_t section_reserve = allowance / MS_BLOCK_SIZE;
 
        SGEN_ASSERT (0, sweep_state == SWEEP_STATE_SWEPT, "Sweeping must have finished before freeing blocks");
 
index 42231e4fcae6f7eb18bde13cbd8c77d4d4fd3289..70cc6f0788329a1d2c27525d9bd5e2ba5162bec4 100644 (file)
@@ -103,7 +103,7 @@ sgen_memgov_calculate_minor_collection_allowance (void)
 
        /* FIXME: Why is this here? */
        if (major_collector.free_swept_blocks)
-               major_collector.free_swept_blocks ();
+               major_collector.free_swept_blocks (allowance);
 
        major_collection_trigger_size = new_heap_size + allowance;