8266083: Shenandoah: Consolidate dedup/no dedup oop closures · openjdk/jdk@1d9ea3a (original) (raw)
1
1
`/*
`
2
``
`-
- Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
`
``
2
`+
- Copyright (c) 2015, 2021, Red Hat, Inc. All rights reserved.
`
3
3
` * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
`
4
4
` *
`
5
5
` * This code is free software; you can redistribute it and/or modify it
`
`@@ -75,10 +75,11 @@ class ShenandoahMarkUpdateRefsSuperClosure : public ShenandoahMarkRefsSuperClosu
`
75
75
` };
`
76
76
`};
`
77
77
``
``
78
`+
template
`
78
79
`class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkUpdateRefsSuperClosure {
`
79
80
`private:
`
80
81
`template
`
81
``
`-
inline void do_oop_work(T* p) { work<T, NO_DEDUP>(p); }
`
``
82
`+
inline void do_oop_work(T* p) { work<T, STRING_DEDUP>(p); }
`
82
83
``
83
84
`public:
`
84
85
`ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :
`
`@@ -89,24 +90,11 @@ class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkUpdateRefsSuperClos
`
89
90
`virtual bool do_metadata() { return false; }
`
90
91
`};
`
91
92
``
92
``
`-
class ShenandoahMarkUpdateRefsDedupClosure : public ShenandoahMarkUpdateRefsSuperClosure {
`
93
``
`-
private:
`
94
``
`-
template
`
95
``
`-
inline void do_oop_work(T* p) { work<T, ENQUEUE_DEDUP>(p); }
`
96
``
-
97
``
`-
public:
`
98
``
`-
ShenandoahMarkUpdateRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :
`
99
``
`-
ShenandoahMarkUpdateRefsSuperClosure(q, rp) {}
`
100
``
-
101
``
`-
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
`
102
``
`-
virtual void do_oop(oop* p) { do_oop_work(p); }
`
103
``
`-
virtual bool do_metadata() { return false; }
`
104
``
`-
};
`
105
``
-
``
93
`+
template
`
106
94
`class ShenandoahMarkUpdateRefsMetadataClosure : public ShenandoahMarkUpdateRefsSuperClosure {
`
107
95
`private:
`
108
96
`template
`
109
``
`-
inline void do_oop_work(T* p) { work<T, NO_DEDUP>(p); }
`
``
97
`+
inline void do_oop_work(T* p) { work<T, STRING_DEDUP>(p); }
`
110
98
``
111
99
`public:
`
112
100
`ShenandoahMarkUpdateRefsMetadataClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :
`
`@@ -117,24 +105,12 @@ class ShenandoahMarkUpdateRefsMetadataClosure : public ShenandoahMarkUpdateRefsS
`
117
105
`virtual bool do_metadata() { return true; }
`
118
106
`};
`
119
107
``
120
``
`-
class ShenandoahMarkUpdateRefsMetadataDedupClosure : public ShenandoahMarkUpdateRefsSuperClosure {
`
121
``
`-
private:
`
122
``
`-
template
`
123
``
`-
inline void do_oop_work(T* p) { work<T, ENQUEUE_DEDUP>(p); }
`
124
``
-
125
``
`-
public:
`
126
``
`-
ShenandoahMarkUpdateRefsMetadataDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :
`
127
``
`-
ShenandoahMarkUpdateRefsSuperClosure(q, rp) {}
`
128
``
-
129
``
`-
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
`
130
``
`-
virtual void do_oop(oop* p) { do_oop_work(p); }
`
131
``
`-
virtual bool do_metadata() { return true; }
`
132
``
`-
};
`
133
108
``
``
109
`+
template
`
134
110
`class ShenandoahMarkRefsClosure : public ShenandoahMarkRefsSuperClosure {
`
135
111
`private:
`
136
112
`template
`
137
``
`-
inline void do_oop_work(T* p) { work<T, NO_DEDUP>(p); }
`
``
113
`+
inline void do_oop_work(T* p) { work<T, STRING_DEDUP>(p); }
`
138
114
``
139
115
`public:
`
140
116
`ShenandoahMarkRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :
`
`@@ -145,24 +121,12 @@ class ShenandoahMarkRefsClosure : public ShenandoahMarkRefsSuperClosure {
`
145
121
`virtual bool do_metadata() { return false; }
`
146
122
`};
`
147
123
``
148
``
`-
class ShenandoahMarkRefsDedupClosure : public ShenandoahMarkRefsSuperClosure {
`
149
``
`-
private:
`
150
``
`-
template
`
151
``
`-
inline void do_oop_work(T* p) { work<T, ENQUEUE_DEDUP>(p); }
`
152
``
-
153
``
`-
public:
`
154
``
`-
ShenandoahMarkRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :
`
155
``
`-
ShenandoahMarkRefsSuperClosure(q, rp) {};
`
156
``
-
157
``
`-
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
`
158
``
`-
virtual void do_oop(oop* p) { do_oop_work(p); }
`
159
``
`-
virtual bool do_metadata() { return false; }
`
160
``
`-
};
`
161
124
``
``
125
`+
template
`
162
126
`class ShenandoahMarkRefsMetadataClosure : public ShenandoahMarkRefsSuperClosure {
`
163
127
`private:
`
164
128
`template
`
165
``
`-
inline void do_oop_work(T* p) { work<T, NO_DEDUP>(p); }
`
``
129
`+
inline void do_oop_work(T* p) { work<T, STRING_DEDUP>(p); }
`
166
130
``
167
131
`public:
`
168
132
`ShenandoahMarkRefsMetadataClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :
`
`@@ -173,20 +137,6 @@ class ShenandoahMarkRefsMetadataClosure : public ShenandoahMarkRefsSuperClosure
`
173
137
`virtual bool do_metadata() { return true; }
`
174
138
`};
`
175
139
``
176
``
`-
class ShenandoahMarkRefsMetadataDedupClosure : public ShenandoahMarkRefsSuperClosure {
`
177
``
`-
private:
`
178
``
`-
template
`
179
``
`-
inline void do_oop_work(T* p) { work<T, ENQUEUE_DEDUP>(p); }
`
180
``
-
181
``
`-
public:
`
182
``
`-
ShenandoahMarkRefsMetadataDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :
`
183
``
`-
ShenandoahMarkRefsSuperClosure(q, rp) {};
`
184
``
-
185
``
`-
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
`
186
``
`-
virtual void do_oop(oop* p) { do_oop_work(p); }
`
187
``
`-
virtual bool do_metadata() { return true; }
`
188
``
`-
};
`
189
``
-
190
140
`class ShenandoahUpdateRefsSuperClosure : public BasicOopIterateClosure {
`
191
141
`protected:
`
192
142
` ShenandoahHeap* _heap;
`