< prev index next >
src/hotspot/share/gc/g1/g1EvacFailure.cpp
Print this page
rev 60059 : imported patch 8210462-fix-remaining-mentions-of-im
*** 77,101 ****
G1CollectedHeap* _g1h;
G1ConcurrentMark* _cm;
HeapRegion* _hr;
size_t _marked_bytes;
UpdateLogBuffersDeferred* _log_buffer_cl;
! bool _during_initial_mark;
uint _worker_id;
HeapWord* _last_forwarded_object_end;
public:
RemoveSelfForwardPtrObjClosure(HeapRegion* hr,
UpdateLogBuffersDeferred* log_buffer_cl,
! bool during_initial_mark,
uint worker_id) :
_g1h(G1CollectedHeap::heap()),
_cm(_g1h->concurrent_mark()),
_hr(hr),
_marked_bytes(0),
_log_buffer_cl(log_buffer_cl),
! _during_initial_mark(during_initial_mark),
_worker_id(worker_id),
_last_forwarded_object_end(hr->bottom()) { }
size_t marked_bytes() { return _marked_bytes; }
--- 77,101 ----
G1CollectedHeap* _g1h;
G1ConcurrentMark* _cm;
HeapRegion* _hr;
size_t _marked_bytes;
UpdateLogBuffersDeferred* _log_buffer_cl;
! bool _during_concurrent_start;
uint _worker_id;
HeapWord* _last_forwarded_object_end;
public:
RemoveSelfForwardPtrObjClosure(HeapRegion* hr,
UpdateLogBuffersDeferred* log_buffer_cl,
! bool during_concurrent_start,
uint worker_id) :
_g1h(G1CollectedHeap::heap()),
_cm(_g1h->concurrent_mark()),
_hr(hr),
_marked_bytes(0),
_log_buffer_cl(log_buffer_cl),
! _during_concurrent_start(during_concurrent_start),
_worker_id(worker_id),
_last_forwarded_object_end(hr->bottom()) { }
size_t marked_bytes() { return _marked_bytes; }
*** 117,134 ****
// live. What we'll do is that we'll update the prev marking
// info so that they are all under PTAMS and explicitly marked.
if (!_cm->is_marked_in_prev_bitmap(obj)) {
_cm->mark_in_prev_bitmap(obj);
}
! if (_during_initial_mark) {
// For the next marking info we'll only mark the
// self-forwarded objects explicitly if we are during
! // initial-mark (since, normally, we only mark objects pointed
// to by roots if we succeed in copying them). By marking all
// self-forwarded objects we ensure that we mark any that are
// still pointed to be roots. During concurrent marking, and
! // after initial-mark, we don't need to mark any objects
// explicitly and all objects in the CSet are considered
// (implicitly) live. So, we won't mark them explicitly and
// we'll leave them over NTAMS.
_cm->mark_in_next_bitmap(_worker_id, _hr, obj);
}
--- 117,134 ----
// live. What we'll do is that we'll update the prev marking
// info so that they are all under PTAMS and explicitly marked.
if (!_cm->is_marked_in_prev_bitmap(obj)) {
_cm->mark_in_prev_bitmap(obj);
}
! if (_during_concurrent_start) {
// For the next marking info we'll only mark the
// self-forwarded objects explicitly if we are during
! // concurrent start (since, normally, we only mark objects pointed
// to by roots if we succeed in copying them). By marking all
// self-forwarded objects we ensure that we mark any that are
// still pointed to be roots. During concurrent marking, and
! // after concurrent start, we don't need to mark any objects
// explicitly and all objects in the CSet are considered
// (implicitly) live. So, we won't mark them explicitly and
// we'll leave them over NTAMS.
_cm->mark_in_next_bitmap(_worker_id, _hr, obj);
}
*** 209,222 ****
_rdcq(rdcqs),
_log_buffer_cl(&_rdcq) {
}
size_t remove_self_forward_ptr_by_walking_hr(HeapRegion* hr,
! bool during_initial_mark) {
RemoveSelfForwardPtrObjClosure rspc(hr,
&_log_buffer_cl,
! during_initial_mark,
_worker_id);
hr->object_iterate(&rspc);
// Need to zap the remainder area of the processed region.
rspc.zap_remainder();
--- 209,222 ----
_rdcq(rdcqs),
_log_buffer_cl(&_rdcq) {
}
size_t remove_self_forward_ptr_by_walking_hr(HeapRegion* hr,
! bool during_concurrent_start) {
RemoveSelfForwardPtrObjClosure rspc(hr,
&_log_buffer_cl,
! during_concurrent_start,
_worker_id);
hr->object_iterate(&rspc);
// Need to zap the remainder area of the processed region.
rspc.zap_remainder();
*** 228,247 ****
assert(hr->in_collection_set(), "bad CS");
if (hr->evacuation_failed()) {
hr->clear_index_in_opt_cset();
! bool during_initial_mark = _g1h->collector_state()->in_initial_mark_gc();
! bool during_conc_mark = _g1h->collector_state()->mark_or_rebuild_in_progress();
! hr->note_self_forwarding_removal_start(during_initial_mark,
! during_conc_mark);
_g1h->verifier()->check_bitmaps("Self-Forwarding Ptr Removal", hr);
hr->reset_bot();
! size_t live_bytes = remove_self_forward_ptr_by_walking_hr(hr, during_initial_mark);
hr->rem_set()->clean_strong_code_roots(hr);
hr->rem_set()->clear_locked(true);
hr->note_self_forwarding_removal_end(live_bytes);
--- 228,247 ----
assert(hr->in_collection_set(), "bad CS");
if (hr->evacuation_failed()) {
hr->clear_index_in_opt_cset();
! bool during_concurrent_start = _g1h->collector_state()->in_concurrent_start_gc();
! bool during_concurrent_mark = _g1h->collector_state()->mark_or_rebuild_in_progress();
! hr->note_self_forwarding_removal_start(during_concurrent_start,
! during_concurrent_mark);
_g1h->verifier()->check_bitmaps("Self-Forwarding Ptr Removal", hr);
hr->reset_bot();
! size_t live_bytes = remove_self_forward_ptr_by_walking_hr(hr, during_concurrent_start);
hr->rem_set()->clean_strong_code_roots(hr);
hr->rem_set()->clear_locked(true);
hr->note_self_forwarding_removal_end(live_bytes);
< prev index next >