RFR: 8275527: Separate/refactor forward pointer access

Roman Kennke rkennke at openjdk.java.net
Tue Oct 19 16:26:05 UTC 2021


Accessing the forward pointer overlay of object headers is currently done in a somewhat crude way. oopDesc::forwardee() and oopeDesc::is_forwarded() both load the header-word. This seems kinda bad, because they are most often used in conjunction, e.g.:
fwd = obj->forwarded() ? obj->forwardee() : promote_obj();

or similar constructs.

Also, in some places, the forwardee is accessed in a more direct fashion using markWord::decode_pointer(), or as HeapWord*, sometimes is_forwarded() is determined by forwardee() == NULL checks (and crude overrides to prepare non-forwarded headers to return NULL in such checks, see g1Full* source files).

I propose to extract and refactor forward pointer access in a way to better support above pattern. In-fact I originally wrote this with performance-enhancement in mind (see oopForwarding.hpp header for more details), but I could not show any actual performance improvements, so let's consider this purely on cleanliness and separation-of-concerns basis.

Testing:
 - [x] tier
 - [ ] tier2
 - [x] hotspot_gc

-------------

Commit messages:
 - Update some copyright headers
 - Add missing includes
 - Merge branch 'master' into optimize-fwdptr
 - Add missing includes
 - Rename mwd -> fwd
 - Add missing file
 - Move remaining forwarding methods to OopForwarding
 - Renames, cleanups
 - Initial implementation of MarkWordDecoder

Changes: https://git.openjdk.java.net/jdk/pull/5955/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5955&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8275527
  Stats: 351 lines in 27 files changed: 170 ins; 79 del; 102 mod
  Patch: https://git.openjdk.java.net/jdk/pull/5955.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/5955/head:pull/5955

PR: https://git.openjdk.java.net/jdk/pull/5955



More information about the hotspot-gc-dev mailing list