提交 6a7b77f1 编写于 作者: J jmasa

6728478: Assertion at parallel promotion from young to old generation

Summary: The fix avoids a call to address_for_index() in this particular situation where it is not known if the passed index is in bounds.
Reviewed-by: tonyp
上级 fb0de77c
...@@ -229,7 +229,7 @@ void ParGCAllocBufferWithBOT::retire(bool end_of_gc, bool retain) { ...@@ -229,7 +229,7 @@ void ParGCAllocBufferWithBOT::retire(bool end_of_gc, bool retain) {
HeapWord* first_card_start = _bsa->address_for_index(first_card_index); HeapWord* first_card_start = _bsa->address_for_index(first_card_index);
if (first_card_start < pre_top) { if (first_card_start < pre_top) {
HeapWord* second_card_start = HeapWord* second_card_start =
_bsa->address_for_index(first_card_index + 1); _bsa->inc_by_region_size(first_card_start);
// Ensure enough room to fill with the smallest block // Ensure enough room to fill with the smallest block
second_card_start = MAX2(second_card_start, pre_top + AlignmentReserve); second_card_start = MAX2(second_card_start, pre_top + AlignmentReserve);
......
...@@ -199,6 +199,12 @@ public: ...@@ -199,6 +199,12 @@ public:
// "index" in "_offset_array". // "index" in "_offset_array".
HeapWord* address_for_index(size_t index) const; HeapWord* address_for_index(size_t index) const;
// Return the address "p" incremented by the size of
// a region. This method does not align the address
// returned to the start of a region. It is a simple
// primitive.
HeapWord* inc_by_region_size(HeapWord* p) const { return p + N_words; }
// Shared space support // Shared space support
void serialize(SerializeOopClosure* soc, HeapWord* start, HeapWord* end); void serialize(SerializeOopClosure* soc, HeapWord* start, HeapWord* end);
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册