提交 9a7f7c0a 编写于 作者: T tschatzl

8027746: Remove do_gen_barrier template parameter in G1ParCopyClosure

Summary: Remove the above mentioned template parameter and related unused code. Also remove some classes that are never used.
Reviewed-by: stefank, mgerdin, jwilhelm
上级 4bdf19fd
...@@ -98,116 +98,4 @@ public: ...@@ -98,116 +98,4 @@ public:
_closure_app_seconds(0.0) { } _closure_app_seconds(0.0) { }
}; };
class BufferingOopsInGenClosure: public OopsInGenClosure {
BufferingOopClosure _boc;
OopsInGenClosure* _oc;
protected:
template <class T> inline void do_oop_work(T* p) {
assert(generation()->is_in_reserved((void*)p), "Must be in!");
_boc.do_oop(p);
}
public:
BufferingOopsInGenClosure(OopsInGenClosure *oc) :
_boc(oc), _oc(oc) {}
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
virtual void do_oop(oop* p) { do_oop_work(p); }
void done() {
_boc.done();
}
double closure_app_seconds () {
return _boc.closure_app_seconds();
}
void set_generation(Generation* gen) {
OopsInGenClosure::set_generation(gen);
_oc->set_generation(gen);
}
void reset_generation() {
// Make sure we finish the current work with the current generation.
_boc.done();
OopsInGenClosure::reset_generation();
_oc->reset_generation();
}
};
class BufferingOopsInHeapRegionClosure: public OopsInHeapRegionClosure {
private:
enum PrivateConstants {
BufferLength = 1024
};
StarTask _buffer[BufferLength];
StarTask* _buffer_top;
StarTask* _buffer_curr;
HeapRegion* _hr_buffer[BufferLength];
HeapRegion** _hr_curr;
OopsInHeapRegionClosure* _oc;
double _closure_app_seconds;
void process_buffer () {
assert((_hr_curr - _hr_buffer) == (_buffer_curr - _buffer),
"the two lengths should be the same");
double start = os::elapsedTime();
HeapRegion** hr_curr = _hr_buffer;
HeapRegion* hr_prev = NULL;
for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) {
HeapRegion* region = *hr_curr;
if (region != hr_prev) {
_oc->set_region(region);
hr_prev = region;
}
if (curr->is_narrow()) {
assert(UseCompressedOops, "Error");
_oc->do_oop((narrowOop*)(*curr));
} else {
_oc->do_oop((oop*)(*curr));
}
++hr_curr;
}
_buffer_curr = _buffer;
_hr_curr = _hr_buffer;
_closure_app_seconds += (os::elapsedTime() - start);
}
public:
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
virtual void do_oop( oop* p) { do_oop_work(p); }
template <class T> void do_oop_work(T* p) {
if (_buffer_curr == _buffer_top) {
assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr");
process_buffer();
}
StarTask new_ref(p);
*_buffer_curr = new_ref;
++_buffer_curr;
*_hr_curr = _from;
++_hr_curr;
}
void done () {
if (_buffer_curr > _buffer) {
assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr");
process_buffer();
}
}
double closure_app_seconds () {
return _closure_app_seconds;
}
BufferingOopsInHeapRegionClosure (OopsInHeapRegionClosure *oc) :
_oc(oc),
_buffer_curr(_buffer), _buffer_top(_buffer + BufferLength),
_hr_curr(_hr_buffer),
_closure_app_seconds(0.0) { }
};
#endif // SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP #endif // SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP
...@@ -50,8 +50,8 @@ ...@@ -50,8 +50,8 @@
#include "gc_implementation/shared/gcTraceTime.hpp" #include "gc_implementation/shared/gcTraceTime.hpp"
#include "gc_implementation/shared/isGCActiveMark.hpp" #include "gc_implementation/shared/isGCActiveMark.hpp"
#include "memory/gcLocker.inline.hpp" #include "memory/gcLocker.inline.hpp"
#include "memory/genOopClosures.inline.hpp"
#include "memory/generationSpec.hpp" #include "memory/generationSpec.hpp"
#include "memory/iterator.hpp"
#include "memory/referenceProcessor.hpp" #include "memory/referenceProcessor.hpp"
#include "oops/oop.inline.hpp" #include "oops/oop.inline.hpp"
#include "oops/oop.pcgc.inline.hpp" #include "oops/oop.pcgc.inline.hpp"
...@@ -3096,11 +3096,7 @@ const char* G1CollectedHeap::top_at_mark_start_str(VerifyOption vo) { ...@@ -3096,11 +3096,7 @@ const char* G1CollectedHeap::top_at_mark_start_str(VerifyOption vo) {
return NULL; // keep some compilers happy return NULL; // keep some compilers happy
} }
// TODO: VerifyRootsClosure extends OopsInGenClosure so that we can class VerifyRootsClosure: public OopClosure {
// pass it as the perm_blk to SharedHeap::process_strong_roots.
// When process_strong_roots stop calling perm_blk->younger_refs_iterate
// we can change this closure to extend the simpler OopClosure.
class VerifyRootsClosure: public OopsInGenClosure {
private: private:
G1CollectedHeap* _g1h; G1CollectedHeap* _g1h;
VerifyOption _vo; VerifyOption _vo;
...@@ -3136,7 +3132,7 @@ public: ...@@ -3136,7 +3132,7 @@ public:
void do_oop(narrowOop* p) { do_oop_nv(p); } void do_oop(narrowOop* p) { do_oop_nv(p); }
}; };
class G1VerifyCodeRootOopClosure: public OopsInGenClosure { class G1VerifyCodeRootOopClosure: public OopClosure {
G1CollectedHeap* _g1h; G1CollectedHeap* _g1h;
OopClosure* _root_cl; OopClosure* _root_cl;
nmethod* _nm; nmethod* _nm;
...@@ -4670,8 +4666,8 @@ G1ParClosureSuper::G1ParClosureSuper(G1CollectedHeap* g1, ...@@ -4670,8 +4666,8 @@ G1ParClosureSuper::G1ParClosureSuper(G1CollectedHeap* g1,
_during_initial_mark(_g1->g1_policy()->during_initial_mark_pause()), _during_initial_mark(_g1->g1_policy()->during_initial_mark_pause()),
_mark_in_progress(_g1->mark_in_progress()) { } _mark_in_progress(_g1->mark_in_progress()) { }
template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object> template <G1Barrier barrier, bool do_mark_object>
void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>::mark_object(oop obj) { void G1ParCopyClosure<barrier, do_mark_object>::mark_object(oop obj) {
#ifdef ASSERT #ifdef ASSERT
HeapRegion* hr = _g1->heap_region_containing(obj); HeapRegion* hr = _g1->heap_region_containing(obj);
assert(hr != NULL, "sanity"); assert(hr != NULL, "sanity");
...@@ -4682,8 +4678,8 @@ void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>::mark_object(oop ...@@ -4682,8 +4678,8 @@ void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>::mark_object(oop
_cm->grayRoot(obj, (size_t) obj->size(), _worker_id); _cm->grayRoot(obj, (size_t) obj->size(), _worker_id);
} }
template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object> template <G1Barrier barrier, bool do_mark_object>
void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object> void G1ParCopyClosure<barrier, do_mark_object>
::mark_forwarded_object(oop from_obj, oop to_obj) { ::mark_forwarded_object(oop from_obj, oop to_obj) {
#ifdef ASSERT #ifdef ASSERT
assert(from_obj->is_forwarded(), "from obj should be forwarded"); assert(from_obj->is_forwarded(), "from obj should be forwarded");
...@@ -4706,8 +4702,8 @@ void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object> ...@@ -4706,8 +4702,8 @@ void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>
_cm->grayRoot(to_obj, (size_t) from_obj->size(), _worker_id); _cm->grayRoot(to_obj, (size_t) from_obj->size(), _worker_id);
} }
template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object> template <G1Barrier barrier, bool do_mark_object>
oop G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object> oop G1ParCopyClosure<barrier, do_mark_object>
::copy_to_survivor_space(oop old) { ::copy_to_survivor_space(oop old) {
size_t word_sz = old->size(); size_t word_sz = old->size();
HeapRegion* from_region = _g1->heap_region_containing_raw(old); HeapRegion* from_region = _g1->heap_region_containing_raw(old);
...@@ -4803,13 +4799,11 @@ void G1ParCopyHelper::do_klass_barrier(T* p, oop new_obj) { ...@@ -4803,13 +4799,11 @@ void G1ParCopyHelper::do_klass_barrier(T* p, oop new_obj) {
} }
} }
template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object> template <G1Barrier barrier, bool do_mark_object>
template <class T> template <class T>
void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object> void G1ParCopyClosure<barrier, do_mark_object>
::do_oop_work(T* p) { ::do_oop_work(T* p) {
oop obj = oopDesc::load_decode_heap_oop(p); oop obj = oopDesc::load_decode_heap_oop(p);
assert(barrier != G1BarrierRS || obj != NULL,
"Precondition: G1BarrierRS implies obj is non-NULL");
assert(_worker_id == _par_scan_state->queue_num(), "sanity"); assert(_worker_id == _par_scan_state->queue_num(), "sanity");
...@@ -4829,10 +4823,7 @@ void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object> ...@@ -4829,10 +4823,7 @@ void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>
mark_forwarded_object(obj, forwardee); mark_forwarded_object(obj, forwardee);
} }
// When scanning the RS, we only care about objs in CS. if (barrier == G1BarrierKlass) {
if (barrier == G1BarrierRS) {
_par_scan_state->update_rs(_from, p, _worker_id);
} else if (barrier == G1BarrierKlass) {
do_klass_barrier(p, forwardee); do_klass_barrier(p, forwardee);
} }
} else { } else {
...@@ -4847,14 +4838,10 @@ void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object> ...@@ -4847,14 +4838,10 @@ void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>
if (barrier == G1BarrierEvac && obj != NULL) { if (barrier == G1BarrierEvac && obj != NULL) {
_par_scan_state->update_rs(_from, p, _worker_id); _par_scan_state->update_rs(_from, p, _worker_id);
} }
if (do_gen_barrier && obj != NULL) {
par_do_barrier(p);
}
} }
template void G1ParCopyClosure<false, G1BarrierEvac, false>::do_oop_work(oop* p); template void G1ParCopyClosure<G1BarrierEvac, false>::do_oop_work(oop* p);
template void G1ParCopyClosure<false, G1BarrierEvac, false>::do_oop_work(narrowOop* p); template void G1ParCopyClosure<G1BarrierEvac, false>::do_oop_work(narrowOop* p);
template <class T> void G1ParScanPartialArrayClosure::do_oop_nv(T* p) { template <class T> void G1ParScanPartialArrayClosure::do_oop_nv(T* p) {
assert(has_partial_array_mask(p), "invariant"); assert(has_partial_array_mask(p), "invariant");
......
...@@ -209,7 +209,7 @@ class G1CollectedHeap : public SharedHeap { ...@@ -209,7 +209,7 @@ class G1CollectedHeap : public SharedHeap {
friend class OldGCAllocRegion; friend class OldGCAllocRegion;
// Closures used in implementation. // Closures used in implementation.
template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object> template <G1Barrier barrier, bool do_mark_object>
friend class G1ParCopyClosure; friend class G1ParCopyClosure;
friend class G1IsAliveClosure; friend class G1IsAliveClosure;
friend class G1EvacuateFollowersClosure; friend class G1EvacuateFollowersClosure;
......
...@@ -38,7 +38,7 @@ class ReferenceProcessor; ...@@ -38,7 +38,7 @@ class ReferenceProcessor;
// A class that scans oops in a given heap region (much as OopsInGenClosure // A class that scans oops in a given heap region (much as OopsInGenClosure
// scans oops in a generation.) // scans oops in a generation.)
class OopsInHeapRegionClosure: public OopsInGenClosure { class OopsInHeapRegionClosure: public ExtendedOopClosure {
protected: protected:
HeapRegion* _from; HeapRegion* _from;
public: public:
...@@ -131,7 +131,7 @@ class G1ParCopyHelper : public G1ParClosureSuper { ...@@ -131,7 +131,7 @@ class G1ParCopyHelper : public G1ParClosureSuper {
template <class T> void do_klass_barrier(T* p, oop new_obj); template <class T> void do_klass_barrier(T* p, oop new_obj);
}; };
template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object> template <G1Barrier barrier, bool do_mark_object>
class G1ParCopyClosure : public G1ParCopyHelper { class G1ParCopyClosure : public G1ParCopyHelper {
G1ParScanClosure _scanner; G1ParScanClosure _scanner;
template <class T> void do_oop_work(T* p); template <class T> void do_oop_work(T* p);
...@@ -166,22 +166,16 @@ public: ...@@ -166,22 +166,16 @@ public:
virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
}; };
typedef G1ParCopyClosure<false, G1BarrierNone, false> G1ParScanExtRootClosure; typedef G1ParCopyClosure<G1BarrierNone, false> G1ParScanExtRootClosure;
typedef G1ParCopyClosure<false, G1BarrierKlass, false> G1ParScanMetadataClosure; typedef G1ParCopyClosure<G1BarrierKlass, false> G1ParScanMetadataClosure;
typedef G1ParCopyClosure<false, G1BarrierNone, true> G1ParScanAndMarkExtRootClosure; typedef G1ParCopyClosure<G1BarrierNone, true> G1ParScanAndMarkExtRootClosure;
typedef G1ParCopyClosure<true, G1BarrierNone, true> G1ParScanAndMarkClosure; typedef G1ParCopyClosure<G1BarrierKlass, true> G1ParScanAndMarkMetadataClosure;
typedef G1ParCopyClosure<false, G1BarrierKlass, true> G1ParScanAndMarkMetadataClosure;
// The following closure types are no longer used but are retained
// for historical reasons:
// typedef G1ParCopyClosure<false, G1BarrierRS, false> G1ParScanHeapRSClosure;
// typedef G1ParCopyClosure<false, G1BarrierRS, true> G1ParScanAndMarkHeapRSClosure;
// The following closure type is defined in g1_specialized_oop_closures.hpp: // The following closure type is defined in g1_specialized_oop_closures.hpp:
// //
// typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacClosure; // typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacClosure;
// We use a separate closure to handle references during evacuation // We use a separate closure to handle references during evacuation
// failure processing. // failure processing.
...@@ -189,7 +183,7 @@ typedef G1ParCopyClosure<false, G1BarrierKlass, true> G1ParScanAndMarkMetadataCl ...@@ -189,7 +183,7 @@ typedef G1ParCopyClosure<false, G1BarrierKlass, true> G1ParScanAndMarkMetadataCl
// (since that closure no longer assumes that the references it // (since that closure no longer assumes that the references it
// handles point into the collection set). // handles point into the collection set).
typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacFailureClosure; typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacFailureClosure;
class FilterIntoCSClosure: public ExtendedOopClosure { class FilterIntoCSClosure: public ExtendedOopClosure {
G1CollectedHeap* _g1; G1CollectedHeap* _g1;
......
...@@ -33,18 +33,17 @@ ...@@ -33,18 +33,17 @@
// Forward declarations. // Forward declarations.
enum G1Barrier { enum G1Barrier {
G1BarrierNone, G1BarrierNone,
G1BarrierRS,
G1BarrierEvac, G1BarrierEvac,
G1BarrierKlass G1BarrierKlass
}; };
template<bool do_gen_barrier, G1Barrier barrier, bool do_mark_object> template<G1Barrier barrier, bool do_mark_object>
class G1ParCopyClosure; class G1ParCopyClosure;
class G1ParScanClosure; class G1ParScanClosure;
class G1ParPushHeapRSClosure; class G1ParPushHeapRSClosure;
typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacClosure; typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacClosure;
class FilterIntoCSClosure; class FilterIntoCSClosure;
class FilterOutOfRegionClosure; class FilterOutOfRegionClosure;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册