243 _rem_set(NULL), |
243 _rem_set(NULL), |
244 _hrm_index(hrm_index), |
244 _hrm_index(hrm_index), |
245 _type(), |
245 _type(), |
246 _humongous_start_region(NULL), |
246 _humongous_start_region(NULL), |
247 _evacuation_failed(false), |
247 _evacuation_failed(false), |
|
248 _index_in_opt_cset(InvalidCSetIndex), |
248 _next(NULL), _prev(NULL), |
249 _next(NULL), _prev(NULL), |
249 #ifdef ASSERT |
250 #ifdef ASSERT |
250 _containing_set(NULL), |
251 _containing_set(NULL), |
251 #endif |
252 #endif |
252 _prev_marked_bytes(0), _next_marked_bytes(0), _gc_efficiency(0.0), |
|
253 _index_in_opt_cset(InvalidCSetIndex), _young_index_in_cset(-1), |
|
254 _surv_rate_group(NULL), _age_index(-1), |
|
255 _prev_top_at_mark_start(NULL), _next_top_at_mark_start(NULL), |
253 _prev_top_at_mark_start(NULL), _next_top_at_mark_start(NULL), |
|
254 _prev_marked_bytes(0), _next_marked_bytes(0), |
|
255 _young_index_in_cset(-1), |
|
256 _surv_rate_group(NULL), _age_index(-1), _gc_efficiency(0.0), |
256 _recorded_rs_length(0), _predicted_elapsed_time_ms(0), |
257 _recorded_rs_length(0), _predicted_elapsed_time_ms(0), |
257 _node_index(G1NUMA::UnknownNodeIndex) |
258 _node_index(G1NUMA::UnknownNodeIndex) |
258 { |
259 { |
259 _rem_set = new HeapRegionRemSet(bot, this); |
260 _rem_set = new HeapRegionRemSet(bot, this); |
260 |
261 |
753 // range [top, end). BOT look-ups in this range should yield |
754 // range [top, end). BOT look-ups in this range should yield |
754 // top. No point in doing that if top == end (there's nothing there). |
755 // top. No point in doing that if top == end (there's nothing there). |
755 if (p < the_end) { |
756 if (p < the_end) { |
756 // Look up top |
757 // Look up top |
757 HeapWord* addr_1 = p; |
758 HeapWord* addr_1 = p; |
758 HeapWord* b_start_1 = _bot_part.block_start_const(addr_1); |
759 HeapWord* b_start_1 = block_start_const(addr_1); |
759 if (b_start_1 != p) { |
760 if (b_start_1 != p) { |
760 log_error(gc, verify)("BOT look up for top: " PTR_FORMAT " " |
761 log_error(gc, verify)("BOT look up for top: " PTR_FORMAT " " |
761 " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, |
762 " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, |
762 p2i(addr_1), p2i(b_start_1), p2i(p)); |
763 p2i(addr_1), p2i(b_start_1), p2i(p)); |
763 *failures = true; |
764 *failures = true; |
765 } |
766 } |
766 |
767 |
767 // Look up top + 1 |
768 // Look up top + 1 |
768 HeapWord* addr_2 = p + 1; |
769 HeapWord* addr_2 = p + 1; |
769 if (addr_2 < the_end) { |
770 if (addr_2 < the_end) { |
770 HeapWord* b_start_2 = _bot_part.block_start_const(addr_2); |
771 HeapWord* b_start_2 = block_start_const(addr_2); |
771 if (b_start_2 != p) { |
772 if (b_start_2 != p) { |
772 log_error(gc, verify)("BOT look up for top + 1: " PTR_FORMAT " " |
773 log_error(gc, verify)("BOT look up for top + 1: " PTR_FORMAT " " |
773 " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, |
774 " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, |
774 p2i(addr_2), p2i(b_start_2), p2i(p)); |
775 p2i(addr_2), p2i(b_start_2), p2i(p)); |
775 *failures = true; |
776 *failures = true; |
779 |
780 |
780 // Look up an address between top and end |
781 // Look up an address between top and end |
781 size_t diff = pointer_delta(the_end, p) / 2; |
782 size_t diff = pointer_delta(the_end, p) / 2; |
782 HeapWord* addr_3 = p + diff; |
783 HeapWord* addr_3 = p + diff; |
783 if (addr_3 < the_end) { |
784 if (addr_3 < the_end) { |
784 HeapWord* b_start_3 = _bot_part.block_start_const(addr_3); |
785 HeapWord* b_start_3 = block_start_const(addr_3); |
785 if (b_start_3 != p) { |
786 if (b_start_3 != p) { |
786 log_error(gc, verify)("BOT look up for top + diff: " PTR_FORMAT " " |
787 log_error(gc, verify)("BOT look up for top + diff: " PTR_FORMAT " " |
787 " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, |
788 " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, |
788 p2i(addr_3), p2i(b_start_3), p2i(p)); |
789 p2i(addr_3), p2i(b_start_3), p2i(p)); |
789 *failures = true; |
790 *failures = true; |
791 } |
792 } |
792 } |
793 } |
793 |
794 |
794 // Look up end - 1 |
795 // Look up end - 1 |
795 HeapWord* addr_4 = the_end - 1; |
796 HeapWord* addr_4 = the_end - 1; |
796 HeapWord* b_start_4 = _bot_part.block_start_const(addr_4); |
797 HeapWord* b_start_4 = block_start_const(addr_4); |
797 if (b_start_4 != p) { |
798 if (b_start_4 != p) { |
798 log_error(gc, verify)("BOT look up for end - 1: " PTR_FORMAT " " |
799 log_error(gc, verify)("BOT look up for end - 1: " PTR_FORMAT " " |
799 " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, |
800 " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, |
800 p2i(addr_4), p2i(b_start_4), p2i(p)); |
801 p2i(addr_4), p2i(b_start_4), p2i(p)); |
801 *failures = true; |
802 *failures = true; |