6847956: G1: crash in oopDesc*G1ParCopyHelper::copy_to_survivor_space(oopDesc*)
Summary: When we copy objects to survivors during marking, we incorrectly set NTAMS to bottom, which causes marking to miss visiting some of those objects.
Reviewed-by: apetrusenko, iveresov
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Fri Oct 02 16:20:42 2009 -0400
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Mon Oct 05 12:05:48 2009 -0400
@@ -569,13 +569,8 @@
// ever evacuated into this region. If we evacuate, allocate, and
// then evacuate we are in deep doodoo.
void note_end_of_copying() {
- assert(top() >= _next_top_at_mark_start,
- "Increase only");
- // Survivor regions will be scanned on the start of concurrent
- // marking.
- if (!is_survivor()) {
- _next_top_at_mark_start = top();
- }
+ assert(top() >= _next_top_at_mark_start, "Increase only");
+ _next_top_at_mark_start = top();
}
// Returns "false" iff no object in the region was allocated when the