Exemple #1
0
void factor_vm::collect_nursery() {

  // Copy live objects from the nursery (as determined by the root set and
  // marked cards in aging and tenured) to aging space.
  gc_workhorse<aging_space, nursery_policy>
      workhorse(this, data->aging, nursery_policy(data->nursery));
  slot_visitor<gc_workhorse<aging_space, nursery_policy>>
      visitor(this, workhorse);

  cell scan = data->aging->start + data->aging->occupied_space();

  visitor.visit_all_roots();
  gc_event* event = current_gc->event;

  if (event)
    event->reset_timer();
  visitor.visit_cards(data->tenured, card_points_to_nursery,
                      card_points_to_nursery);
  visitor.visit_cards(data->aging, card_points_to_nursery, 0xff);
  if (event)
    event->ended_card_scan(visitor.cards_scanned, visitor.decks_scanned);

  if (event)
    event->reset_timer();
  visitor.visit_code_heap_roots(&code->points_to_nursery);
  if (event)
    event->ended_code_scan(code->points_to_nursery.size());

  visitor.cheneys_algorithm(data->aging, scan);

  data->reset_nursery();
  code->points_to_nursery.clear();
}
Exemple #2
0
nursery_collector::nursery_collector(factor_vm* parent)
    : copying_collector<aging_space, nursery_policy>(parent,
                                                     parent->data->aging,
                                                     nursery_policy(parent)) {}