racket/racket
dyb 48487ed6fb Added support for incremental promotion of objects
- the collector now promotes objects one generation higher at a time
  by default.  previously, it promoted every live oldspace object to
  the selected target generation, which could result in objects
  prematurely skipping one or more generations and thus being
  retained longer than their ages justify.  the biggest cost in
  terms of code complexity and performance is the recording of
  pointers from older newspace objects to younger newspace objects
  that could not previously occur.
    gc.c, alloc.c, externs.h
- the collect procedure now takes an additional optional minimum
  target generation argument to allow the new default behavior to
  be overridden.
    7.ss, primdata.ss,
    gcwrapper.c,
    7.ms, root-experr*,
    smgmt.stex, release_notes.stex
- added cn flag to control collect-notify
    mats/Mf-base
- resweep_weak_pairs now sets sweep_loc to orig_next_loc rather than
  first_loc since the latter could result in unnecessary sweeping of
  existing target-generation weak pairs.
    gc.c
- added set of S_child_processes[newg] to S_child_processes[oldg]
  in S_do_gc code handling decreases in the maximum generation.
    gcwrapper.c
- a specialized variant of the collector is used in the common case
  where the max copied generation is 0, the min and max target
  generations are 1, and there are no locked generation 0 objects
  is now used. with the default collection parameters and no locking
  of generation 0 objects, these collections account for 3/4 of all
  collections.
    gc.c, gc-011.c (new), gcwrapper.c, externs.h, c/Mf-base
- maybe-fire-collector no longer tries to be so precise and instead
  just counts the number of generation-bytes allocated since the
  last gc.  suprisingly, rebuilding the s directory requires about
  the same number of collections with this coarser (and less
  expensive) measurement.  this change also fixes a problem with
  too-frequent collections when the maximum-generation is set to
  zero.  to make the determination even less expensive, a running
  total of bytes in each generation is now maintained in a new
  bytes_of_generation vector, and maybe-fire-collector is no longer
  called when the collector is running.
    alloc.c, gc.c, gcwrapper.c, globals.h
- copy now copies two pairs at once only if they are in the same
  segment, which saves a few memonry references and tests and turns
  out not to reduce the number of opportunities significantly in
  tested programs.
    gc.c
- occupied_segments, first_loc, base_loc, next_loc, bytes_left,
  bytes_of_space, sweep_loc, and orig_next_loc are now indexed
  by [g][s] rather than [s][g] to improve locality in the default
  (and common) case where there are only a handful of active
  generations.
    globals.h, types.h, segment.c, gc.c, gcwrapper.c, prim5.c
- now maintaining 16-byte architectural stack alignment (if the
  incoming stack is so aligned) on all x86 platforms except
  i3nt/ti3nt.  more recent versions of gcc sometimes generate sse
  instructions that require 16-byte stack alignment.
    x86.ss

[Merge for Racket includes additional changes to combine with in-place
 marking - mflatt]
2020-08-14 17:08:04 -06:00
..
collects raco setup: add debug logging to report available concurrency 2020-08-13 13:54:10 -06:00
src Added support for incremental promotion of objects 2020-08-14 17:08:04 -06:00
.gitignore internal hooks to build "Racket.exe" without "libracket3m.dll" 2015-03-28 09:50:01 -06:00