aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp
diff options
context:
space:
mode:
authorjohnc <none@none>2010-08-02 12:51:43 -0700
committerjohnc <none@none>2010-08-02 12:51:43 -0700
commitb93732e26ded7bcc712748838b47701e712985db (patch)
treedb6d6b2ba1fff92f00f311661e02e9e9e10161b8 /src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp
parent77ebec4f1a99bfb4f9d7227fbe675a11244f376e (diff)
6814437: G1: remove the _new_refs array
Summary: The per-worker _new_refs array is used to hold references that point into the collection set. It is populated during RSet updating and subsequently processed. In the event of an evacuation failure it processed again to recreate the RSets of regions in the collection set. Remove the per-worker _new_refs array by processing the references directly. Use a DirtyCardQueue to hold the cards containing the references so that the RSets of regions in the collection set can be recreated when handling an evacuation failure. Reviewed-by: iveresov, jmasa, tonyp
Diffstat (limited to 'src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp')
-rw-r--r--src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp b/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp
index 1037b83bd..28ec22b04 100644
--- a/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp
+++ b/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -37,7 +37,8 @@ template <class T> inline void FilterIntoCSClosure::do_oop_nv(T* p) {
_g1->obj_in_cs(oopDesc::decode_heap_oop_not_null(heap_oop))) {
_oc->do_oop(p);
#if FILTERINTOCSCLOSURE_DOHISTOGRAMCOUNT
- _dcto_cl->incr_count();
+ if (_dcto_cl != NULL)
+ _dcto_cl->incr_count();
#endif
}
}
@@ -113,7 +114,10 @@ template <class T> inline void G1ParPushHeapRSClosure::do_oop_nv(T* p) {
if (_g1->in_cset_fast_test(obj)) {
Prefetch::write(obj->mark_addr(), 0);
Prefetch::read(obj->mark_addr(), (HeapWordSize*2));
+
+ // Place on the references queue
_par_scan_state->push_on_queue(p);
}
}
}
+