< prev index next >
src/hotspot/share/gc/g1/g1OopClosures.inline.hpp
Print this page
rev 52675 : 8213890: Implementation of JEP 344: Abortable Mixed Collections for G1
Reviewed-by:
Contributed-by: erik.helin@oracle.com, stefan.johansson@oracle.com
rev 52676 : imported patch AMGC-impl
@@ -62,10 +62,12 @@
template <class T>
inline void G1ScanClosureBase::handle_non_cset_obj_common(InCSetState const state, T* p, oop const obj) {
if (state.is_humongous()) {
_g1h->set_humongous_is_live(obj);
+ } else if (state.is_optional()) {
+ _par_scan_state->remember_reference_into_optional_region(p);
}
}
inline void G1ScanClosureBase::trim_queue_partially() {
_par_scan_state->trim_queue_partially();
@@ -193,10 +195,16 @@
} else if (!HeapRegion::is_in_same_region(p, obj)) {
handle_non_cset_obj_common(state, p, obj);
}
}
+template <class T>
+inline void G1ScanRSForOptionalClosure::do_oop_work(T* p) {
+ _scan_cl->do_oop_work(p);
+ _scan_cl->trim_queue_partially();
+}
+
void G1ParCopyHelper::do_cld_barrier(oop new_obj) {
if (_g1h->heap_region_containing(new_obj)->is_young()) {
_scanned_cld->record_modified_oops();
}
}
@@ -261,10 +269,12 @@
do_cld_barrier(forwardee);
}
} else {
if (state.is_humongous()) {
_g1h->set_humongous_is_live(obj);
+ } else if (state.is_optional()) {
+ _par_scan_state->remember_root_into_optional_region(p);
}
// The object is not in collection set. If we're a root scanning
// closure during an initial mark pause then attempt to mark the object.
if (do_mark_object == G1MarkFromRoot) {
< prev index next >