17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "gc/g1/dirtyCardQueue.hpp"
27 #include "gc/g1/g1CollectedHeap.inline.hpp"
28 #include "gc/g1/g1CollectorState.hpp"
29 #include "gc/g1/g1ConcurrentMark.inline.hpp"
30 #include "gc/g1/g1EvacFailure.hpp"
31 #include "gc/g1/g1HeapVerifier.hpp"
32 #include "gc/g1/g1OopClosures.inline.hpp"
33 #include "gc/g1/g1_globals.hpp"
34 #include "gc/g1/heapRegion.hpp"
35 #include "gc/g1/heapRegionRemSet.hpp"
36 #include "gc/shared/preservedMarks.inline.hpp"
37
38 class UpdateRSetDeferred : public ExtendedOopClosure {
39 private:
40 G1CollectedHeap* _g1;
41 DirtyCardQueue* _dcq;
42 G1CardTable* _ct;
43
44 public:
45 UpdateRSetDeferred(DirtyCardQueue* dcq) :
46 _g1(G1CollectedHeap::heap()), _ct(_g1->card_table()), _dcq(dcq) {}
47
48 virtual void do_oop(narrowOop* p) { do_oop_work(p); }
49 virtual void do_oop( oop* p) { do_oop_work(p); }
50 template <class T> void do_oop_work(T* p) {
51 assert(_g1->heap_region_containing(p)->is_in_reserved(p), "paranoia");
52 assert(!_g1->heap_region_containing(p)->is_survivor(), "Unexpected evac failure in survivor region");
53
54 T const o = oopDesc::load_heap_oop(p);
55 if (oopDesc::is_null(o)) {
56 return;
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "gc/g1/dirtyCardQueue.hpp"
27 #include "gc/g1/g1CollectedHeap.inline.hpp"
28 #include "gc/g1/g1CollectorState.hpp"
29 #include "gc/g1/g1ConcurrentMark.inline.hpp"
30 #include "gc/g1/g1EvacFailure.hpp"
31 #include "gc/g1/g1HeapVerifier.hpp"
32 #include "gc/g1/g1OopClosures.inline.hpp"
33 #include "gc/g1/g1_globals.hpp"
34 #include "gc/g1/heapRegion.hpp"
35 #include "gc/g1/heapRegionRemSet.hpp"
36 #include "gc/shared/preservedMarks.inline.hpp"
37 #include "oops/oop.inline.hpp"
38
39 class UpdateRSetDeferred : public ExtendedOopClosure {
40 private:
41 G1CollectedHeap* _g1;
42 DirtyCardQueue* _dcq;
43 G1CardTable* _ct;
44
45 public:
46 UpdateRSetDeferred(DirtyCardQueue* dcq) :
47 _g1(G1CollectedHeap::heap()), _ct(_g1->card_table()), _dcq(dcq) {}
48
49 virtual void do_oop(narrowOop* p) { do_oop_work(p); }
50 virtual void do_oop( oop* p) { do_oop_work(p); }
51 template <class T> void do_oop_work(T* p) {
52 assert(_g1->heap_region_containing(p)->is_in_reserved(p), "paranoia");
53 assert(!_g1->heap_region_containing(p)->is_survivor(), "Unexpected evac failure in survivor region");
54
55 T const o = oopDesc::load_heap_oop(p);
56 if (oopDesc::is_null(o)) {
57 return;
|