--- old/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp 2013-02-04 16:14:13.000000000 +0100 +++ new/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp 2013-02-04 16:14:13.000000000 +0100 @@ -28,8 +28,9 @@ #include "gc_implementation/g1/concurrentMark.hpp" #include "gc_implementation/g1/g1AllocRegion.hpp" #include "gc_implementation/g1/g1HRPrinter.hpp" -#include "gc_implementation/g1/g1RemSet.hpp" #include "gc_implementation/g1/g1MonitoringSupport.hpp" +#include "gc_implementation/g1/g1PreservedMarksQueue.hpp" +#include "gc_implementation/g1/g1RemSet.hpp" #include "gc_implementation/g1/heapRegionSeq.hpp" #include "gc_implementation/g1/heapRegionSets.hpp" #include "gc_implementation/shared/hSpaceCounters.hpp" @@ -877,10 +878,8 @@ // forwarding pointers to themselves. Reset them. void remove_self_forwarding_pointers(); - // When one is non-null, so is the other. Together, they each pair is - // an object with a preserved mark, and its mark value. - GrowableArray* _objs_with_preserved_marks; - GrowableArray* _preserved_marks_of_objs; + // Objects with a preserved mark, and its mark value. + G1PreservedMarksQueue _preserved_marks; // Preserve the mark of "obj", if necessary, in preparation for its mark // word being overwritten with a self-forwarding-pointer.