RFR: 8229258: Make markOopDesc AllStatic
Roman Kennke
rkennke at redhat.com
Thu Aug 8 10:22:24 UTC 2019
First glance.
Instead of making it AllStatic, I'd probably have made it a plain object:
class markWord {
}
and instead of changing e.g.:
obj->mark().set_unlocked();
to
MarkWord::set_unlocked(obj->mark());
leave it like it is. Looks/feels better to me.
Have you tried that? Is this too tricky to do? Or what is the reason to
use static accessors there?
Roman
> Hi all,
>
> Please review this patch to make markOopDesc AllStatic.
>
> https://cr.openjdk.java.net/~stefank/8229258/webrev.01/
> https://bugs.openjdk.java.net/browse/JDK-8229258
>
> From the RFE:
>
> I want to change/rename markOop and markOopDesc
>
> Today markOopDescs inherits from oopDesc even though they are not
> oopDescs (Java objects):
> `class markOopDesc : public oopDesc {`
>
> This is very confusing to new-comers (and probably to old-timers as well).
>
> A simple fix would be to break the inheritance and do the following rename:
> markOopDesc -> MarkWord
> markOop -> markWord
>
> However, there are more dubious code in this area. markOopDescs are
> created and used like this:
>
> ```
> class oopDesc {
> ...
> volatile markOop _mark;
> ...
> markOop oopDesc::mark_raw() const { return _mark; }
> ...
> // Usage
> obj->mark_raw()->is_marked()
> ...
> // Implementation
> bool is_marked() const {
> return (mask_bits(value(), lock_mask_in_place) == marked_value);
> }
> ...
> // Implementation
> bool is_being_inflated() const { return (value() == 0); }
> ...
> // Implementation of markOopDesc::value()
> uintptr_t value() const { return (uintptr_t) this; }
> ```
>
> Remember, _mark is an arbitrary bit pattern describing the object. We
> treat it as if it were a pointer to a markOopDesc object, but it's not
> pointing to such an object. While using that (weird) pointer we call
> value() and extract it's bit pattern to be used for further bit pattern
> checking functions. AFAICT, this is also undefined behavior. At least
> is_being_inflated() const is effectively 'return (uintptr_t) this ==
> NULL'. This UB was recently discussed here:
> https://mail.openjdk.java.net/pipermail/hotspot-dev/2019-July/038704.html
> https://mail.openjdk.java.net/pipermail/hotspot-dev/2019-July/038712.html
>
> I propose that we change MarkWord (markOopDesc) to be an AllStatic class
> instead and get rid of this (ab)use of the markWord (markOop) pointer.
>
> The patch is large but mostly straight forward. However, there is some
> Java code that would need some extra scrutiny: SA and JVMCI.
>
> Tested with tier1-3.
>
> Coleen has asked for file rename from markOop.hpp to markWord.hpp. I'd
> like to do that as a separate RFE when/if this patch gets accepted.
>
> Thanks,
> StefanK
>
More information about the hotspot-dev
mailing list