< prev index next >
src/share/vm/gc_implementation/shenandoah/shenandoahOopClosures.hpp
Print this page
rev 10663 : [backport] StringDedupMode enum for closures/method templates
rev 10715 : [backport] Cleanup up superfluous newlines
rev 10772 : [backport] Update copyrights
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2015, Red Hat, Inc. and/or its affiliates.
+ * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
@@ -35,10 +35,15 @@
RESOLVE, // Only a read-barrier (no reference updating)
SIMPLE, // Reference updating using simple store
CONCURRENT // Reference updating using CAS
};
+enum StringDedupMode {
+ NO_DEDUP, // Do not do anything for String deduplication
+ ENQUEUE_DEDUP, // Enqueue candidate Strings for deduplication
+};
+
class ShenandoahMarkRefsSuperClosure : public MetadataAwareOopClosure {
private:
ShenandoahObjToScanQueue* _queue;
ShenandoahStrDedupQueue* _dedup_queue;
ShenandoahHeap* _heap;
@@ -46,21 +51,21 @@
public:
ShenandoahMarkRefsSuperClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp);
ShenandoahMarkRefsSuperClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp);
- template <class T, UpdateRefsMode UPDATE_MODE, bool STRING_DEDUP>
+ template <class T, UpdateRefsMode UPDATE_MODE, StringDedupMode STRING_DEDUP>
void work(T *p);
};
class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
public:
ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, CONCURRENT, false /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, CONCURRENT, NO_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return false; }
virtual bool do_metadata() { return false; }
};
@@ -69,11 +74,11 @@
public:
ShenandoahMarkUpdateRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, CONCURRENT, true /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, CONCURRENT, ENQUEUE_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return false; }
virtual bool do_metadata() { return false; }
};
@@ -82,11 +87,11 @@
public:
ShenandoahMarkUpdateRefsMetadataClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, CONCURRENT, false /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, CONCURRENT, NO_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return true; }
virtual bool do_metadata() { return true; }
};
@@ -95,11 +100,11 @@
public:
ShenandoahMarkUpdateRefsMetadataDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, CONCURRENT, true /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, CONCURRENT, ENQUEUE_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return true; }
virtual bool do_metadata() { return true; }
};
@@ -108,11 +113,11 @@
public:
ShenandoahMarkRefsClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, NONE, false /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, NONE, NO_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return false; }
virtual bool do_metadata() { return false; }
};
@@ -121,11 +126,11 @@
public:
ShenandoahMarkRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, NONE, true /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, NONE, ENQUEUE_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return false; }
virtual bool do_metadata() { return false; }
};
@@ -134,11 +139,11 @@
public:
ShenandoahMarkResolveRefsClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, RESOLVE, false /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, RESOLVE, NO_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return false; }
virtual bool do_metadata() { return false; }
};
@@ -147,11 +152,11 @@
public:
ShenandoahMarkResolveRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, RESOLVE, true /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, RESOLVE, ENQUEUE_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return false; }
virtual bool do_metadata() { return false; }
};
@@ -160,11 +165,11 @@
public:
ShenandoahMarkRefsMetadataClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, NONE, false /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, NONE, NO_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return true; }
virtual bool do_metadata() { return true; }
};
@@ -173,11 +178,11 @@
public:
ShenandoahMarkRefsMetadataDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
template <class T>
- inline void do_oop_nv(T* p) { work<T, NONE, true /* string dedup */>(p); }
+ inline void do_oop_nv(T* p) { work<T, NONE, ENQUEUE_DEDUP>(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
inline bool do_metadata_nv() { return true; }
virtual bool do_metadata() { return true; }
};
@@ -193,7 +198,6 @@
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
};
-
#endif // SHARE_VM_GC_SHENANDOAH_SHENANDOAHOOPCLOSURES_HPP
< prev index next >