< prev index next >

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

Print this page

        

*** 364,374 **** // Now that the BOT and the object header have been initialized, // we can update top of the "starts humongous" region. first_hr->set_top(MIN2(first_hr->end(), obj_top)); if (_hr_printer.is_active()) { ! _hr_printer.alloc(G1HRPrinter::StartsHumongous, first_hr, first_hr->end()); } // Now, we will update the top fields of the "continues humongous" // regions. The reason we need to do this is that, otherwise, // these regions would look empty and this will confuse parts of --- 364,374 ---- // Now that the BOT and the object header have been initialized, // we can update top of the "starts humongous" region. first_hr->set_top(MIN2(first_hr->end(), obj_top)); if (_hr_printer.is_active()) { ! _hr_printer.alloc(G1HRPrinter::StartsHumongous, first_hr, first_hr->top()); } // Now, we will update the top fields of the "continues humongous" // regions. The reason we need to do this is that, otherwise, // these regions would look empty and this will confuse parts of
*** 1126,1139 **** if (r->is_continues_humongous()) { // We'll assert that the strong code root list and RSet is empty assert(hrrs->strong_code_roots_list_length() == 0, "sanity"); assert(hrrs->occupied() == 0, "RSet should be empty"); ! return false; ! } ! hrrs->clear(); // You might think here that we could clear just the cards // corresponding to the used region. But no: if we leave a dirty card // in a region we might allocate into, then it would prevent that card // from being enqueued, and cause it to be missed. // Re: the performance cost: we shouldn't be doing full GC anyway! --- 1126,1138 ---- if (r->is_continues_humongous()) { // We'll assert that the strong code root list and RSet is empty assert(hrrs->strong_code_roots_list_length() == 0, "sanity"); assert(hrrs->occupied() == 0, "RSet should be empty"); ! } else { hrrs->clear(); + } // You might think here that we could clear just the cards // corresponding to the used region. But no: if we leave a dirty card // in a region we might allocate into, then it would prevent that card // from being enqueued, and cause it to be missed. // Re: the performance cost: we shouldn't be doing full GC anyway!
*** 5757,5767 **** // Need to clear mark bit of the humongous object if already set. if (next_bitmap->isMarked(r->bottom())) { next_bitmap->clear(r->bottom()); } do { ! HeapRegion* next = g1h->next_humongous_region(r); _freed_bytes += r->used(); r->set_containing_set(NULL); _humongous_regions_removed.increment(1u, r->capacity()); g1h->free_humongous_region(r, _free_region_list, false); r = next; --- 5756,5766 ---- // Need to clear mark bit of the humongous object if already set. if (next_bitmap->isMarked(r->bottom())) { next_bitmap->clear(r->bottom()); } do { ! HeapRegion* next = g1h->next_region_in_humongous(r); _freed_bytes += r->used(); r->set_containing_set(NULL); _humongous_regions_removed.increment(1u, r->capacity()); g1h->free_humongous_region(r, _free_region_list, false); r = next;
< prev index next >