< prev index next >

src/share/vm/gc/g1/youngList.cpp

Print this page
rev 11039 : 8155209: Move setting of young index in cset to G1CollectionSet
Reviewed-by:
rev 11040 : 8150393: Maintain the set of survivor regions in an array between GCs
Reviewed-by:
rev 11041 : [mq]: remove-survlist

*** 29,43 **** #include "gc/g1/heapRegion.hpp" #include "gc/g1/heapRegion.inline.hpp" #include "gc/g1/heapRegionRemSet.hpp" #include "gc/g1/youngList.hpp" #include "logging/log.hpp" #include "utilities/ostream.hpp" YoungList::YoungList(G1CollectedHeap* g1h) : ! _g1h(g1h), _head(NULL), _length(0), ! _survivor_head(NULL), _survivor_tail(NULL), _survivor_length(0) { guarantee(check_list_empty(), "just making sure..."); } void YoungList::push_region(HeapRegion *hr) { assert(!hr->is_young(), "should not already be young"); --- 29,46 ---- #include "gc/g1/heapRegion.hpp" #include "gc/g1/heapRegion.inline.hpp" #include "gc/g1/heapRegionRemSet.hpp" #include "gc/g1/youngList.hpp" #include "logging/log.hpp" + #include "utilities/growableArray.hpp" #include "utilities/ostream.hpp" YoungList::YoungList(G1CollectedHeap* g1h) : ! _g1h(g1h), ! _survivor_regions(new (ResourceObj::C_HEAP, mtGC) GrowableArray<HeapRegion*>(8, true, mtGC)), ! _head(NULL), ! _length(0) { guarantee(check_list_empty(), "just making sure..."); } void YoungList::push_region(HeapRegion *hr) { assert(!hr->is_young(), "should not already be young");
*** 52,67 **** void YoungList::add_survivor_region(HeapRegion* hr) { assert(hr->is_survivor(), "should be flagged as survivor region"); assert(hr->get_next_young_region() == NULL, "cause it should!"); ! hr->set_next_young_region(_survivor_head); ! if (_survivor_head == NULL) { ! _survivor_tail = hr; ! } ! _survivor_head = hr; ! ++_survivor_length; } void YoungList::empty_list(HeapRegion* list) { while (list != NULL) { HeapRegion* next = list->get_next_young_region(); --- 55,65 ---- void YoungList::add_survivor_region(HeapRegion* hr) { assert(hr->is_survivor(), "should be flagged as survivor region"); assert(hr->get_next_young_region() == NULL, "cause it should!"); ! _survivor_regions->append(hr); } void YoungList::empty_list(HeapRegion* list) { while (list != NULL) { HeapRegion* next = list->get_next_young_region();
*** 80,97 **** empty_list(_head); _head = NULL; _length = 0; ! empty_list(_survivor_head); ! _survivor_head = NULL; ! _survivor_tail = NULL; ! _survivor_length = 0; assert(check_list_empty(), "just making sure..."); } bool YoungList::check_list_well_formed() { bool ret = true; uint length = 0; HeapRegion* curr = _head; --- 78,99 ---- empty_list(_head); _head = NULL; _length = 0; ! if (survivor_length() > 0) { ! empty_list(_survivor_regions->last()); ! } ! _survivor_regions->clear(); assert(check_list_empty(), "just making sure..."); } + uint YoungList::survivor_length() { + return _survivor_regions->length(); + } + bool YoungList::check_list_well_formed() { bool ret = true; uint length = 0; HeapRegion* curr = _head;
*** 143,199 **** // Add survivor regions to SurvRateGroup. _g1h->g1_policy()->note_start_adding_survivor_regions(); _g1h->g1_policy()->finished_recalculating_age_indexes(true /* is_survivors */); ! for (HeapRegion* curr = _survivor_head; ! curr != NULL; ! curr = curr->get_next_young_region()) { _g1h->g1_policy()->set_region_survivor(curr); // The region is a non-empty survivor so let's add it to // the incremental collection set for the next evacuation // pause. _g1h->collection_set()->add_survivor_regions(curr); } _g1h->g1_policy()->note_stop_adding_survivor_regions(); ! _head = _survivor_head; ! _length = _survivor_length; ! if (_survivor_head != NULL) { ! assert(_survivor_tail != NULL, "cause it shouldn't be"); ! assert(_survivor_length > 0, "invariant"); ! _survivor_tail->set_next_young_region(NULL); ! } // Don't clear the survivor list handles until the start of // the next evacuation pause - we need it in order to re-tag // the survivor regions from this evacuation pause as 'young' // at the start of the next. _g1h->g1_policy()->finished_recalculating_age_indexes(false /* is_survivors */); assert(check_list_well_formed(), "young list should be well formed"); } - - void YoungList::print() { - HeapRegion* lists[] = {_head, _survivor_head}; - const char* names[] = {"YOUNG", "SURVIVOR"}; - - for (uint list = 0; list < ARRAY_SIZE(lists); ++list) { - tty->print_cr("%s LIST CONTENTS", names[list]); - HeapRegion *curr = lists[list]; - if (curr == NULL) { - tty->print_cr(" empty"); - } - while (curr != NULL) { - tty->print_cr(" " HR_FORMAT ", P: " PTR_FORMAT ", N: " PTR_FORMAT ", age: %4d", - HR_FORMAT_PARAMS(curr), - p2i(curr->prev_top_at_mark_start()), - p2i(curr->next_top_at_mark_start()), - curr->age_in_surv_rate_group_cond()); - curr = curr->get_next_young_region(); - } - } - - tty->cr(); - } --- 145,178 ---- // Add survivor regions to SurvRateGroup. _g1h->g1_policy()->note_start_adding_survivor_regions(); _g1h->g1_policy()->finished_recalculating_age_indexes(true /* is_survivors */); ! HeapRegion* last = NULL; ! for (GrowableArrayIterator<HeapRegion*> it = _survivor_regions->begin(); ! it != _survivor_regions->end(); ! ++it) { ! HeapRegion* curr = *it; _g1h->g1_policy()->set_region_survivor(curr); // The region is a non-empty survivor so let's add it to // the incremental collection set for the next evacuation // pause. _g1h->collection_set()->add_survivor_regions(curr); + + curr->set_next_young_region(last); + last = curr; } _g1h->g1_policy()->note_stop_adding_survivor_regions(); ! _head = last; ! _length = _survivor_regions->length(); // Don't clear the survivor list handles until the start of // the next evacuation pause - we need it in order to re-tag // the survivor regions from this evacuation pause as 'young' // at the start of the next. _g1h->g1_policy()->finished_recalculating_age_indexes(false /* is_survivors */); assert(check_list_well_formed(), "young list should be well formed"); }
< prev index next >