Skip to content

Commit 7e421ce

Browse files
committed
8330585: Refactor/rename forwardee handling
Reviewed-by: stefank, ayang
1 parent 3e65d90 commit 7e421ce

File tree

6 files changed

+18
-14
lines changed

6 files changed

+18
-14
lines changed

src/hotspot/share/gc/g1/g1OopClosures.inline.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ void G1ParCopyClosure<barrier, should_mark>::do_oop_work(T* p) {
227227
if (state.is_in_cset()) {
228228
oop forwardee;
229229
markWord m = obj->mark();
230-
if (m.is_marked()) {
231-
forwardee = cast_to_oop(m.decode_pointer());
230+
if (m.is_forwarded()) {
231+
forwardee = m.forwardee();
232232
} else {
233233
forwardee = _par_scan_state->copy_to_survivor_space(state, obj, m);
234234
}

src/hotspot/share/gc/g1/g1ParScanThreadState.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,8 @@ void G1ParScanThreadState::do_oop_evac(T* p) {
211211
}
212212

213213
markWord m = obj->mark();
214-
if (m.is_marked()) {
215-
obj = cast_to_oop(m.decode_pointer());
214+
if (m.is_forwarded()) {
215+
obj = m.forwardee();
216216
} else {
217217
obj = do_copy_to_survivor_space(region_attr, obj, m);
218218
}

src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,15 @@ inline oop PSPromotionManager::copy_to_survivor_space(oop o) {
145145
// in o. There may be multiple threads racing on it, and it may be forwarded
146146
// at any time.
147147
markWord m = o->mark();
148-
if (!m.is_marked()) {
148+
if (!m.is_forwarded()) {
149149
return copy_unmarked_to_survivor_space<promote_immediately>(o, m);
150150
} else {
151151
// Ensure any loads from the forwardee follow all changes that precede
152152
// the release-cmpxchg that performed the forwarding, possibly in some
153153
// other thread.
154154
OrderAccess::acquire();
155155
// Return the already installed forwardee.
156-
return cast_to_oop(m.decode_pointer());
156+
return m.forwardee();
157157
}
158158
}
159159

src/hotspot/share/gc/shared/preservedMarks.inline.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ inline void PreservedMarks::push_if_necessary(oop obj, markWord m) {
4343
}
4444

4545
inline void PreservedMarks::push_always(oop obj, markWord m) {
46-
assert(!m.is_marked(), "precondition");
46+
assert(!m.is_forwarded(), "precondition");
4747
PreservedMark elem(obj, m);
4848
_stack.push(elem);
4949
}

src/hotspot/share/oops/markWord.hpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ class markWord {
143143
bool is_marked() const {
144144
return (mask_bits(value(), lock_mask_in_place) == marked_value);
145145
}
146+
bool is_forwarded() const {
147+
return (mask_bits(value(), lock_mask_in_place) == marked_value);
148+
}
146149
bool is_neutral() const { // Not locked, or marked - a "clean" neutral state
147150
return (mask_bits(value(), lock_mask_in_place) == unlocked_value);
148151
}
@@ -225,7 +228,7 @@ class markWord {
225228
}
226229

227230
// used to encode pointers during GC
228-
markWord clear_lock_bits() { return markWord(value() & ~lock_mask_in_place); }
231+
markWord clear_lock_bits() const { return markWord(value() & ~lock_mask_in_place); }
229232

230233
// age operations
231234
markWord set_marked() { return markWord((value() & ~lock_mask_in_place) | marked_value); }
@@ -259,7 +262,11 @@ class markWord {
259262
inline static markWord encode_pointer_as_mark(void* p) { return from_pointer(p).set_marked(); }
260263

261264
// Recover address of oop from encoded form used in mark
262-
inline void* decode_pointer() { return (void*)clear_lock_bits().value(); }
265+
inline void* decode_pointer() const { return (void*)clear_lock_bits().value(); }
266+
267+
inline oop forwardee() const {
268+
return cast_to_oop(decode_pointer());
269+
}
263270
};
264271

265272
// Support atomic operations.

src/hotspot/share/oops/oop.inline.hpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,7 @@ bool oopDesc::is_gc_marked() const {
262262

263263
// Used by scavengers
264264
bool oopDesc::is_forwarded() const {
265-
// The extra heap check is needed since the obj might be locked, in which case the
266-
// mark would point to a stack location and have the sentinel bit cleared
267-
return mark().is_marked();
265+
return mark().is_forwarded();
268266
}
269267

270268
// Used by scavengers
@@ -289,8 +287,7 @@ oop oopDesc::forward_to_atomic(oop p, markWord compare, atomic_memory_order orde
289287
// The forwardee is used when copying during scavenge and mark-sweep.
290288
// It does need to clear the low two locking- and GC-related bits.
291289
oop oopDesc::forwardee() const {
292-
assert(is_forwarded(), "only decode when actually forwarded");
293-
return cast_to_oop(mark().decode_pointer());
290+
return mark().forwardee();
294291
}
295292

296293
// The following method needs to be MT safe.

0 commit comments

Comments
 (0)