< 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 >