RFR: 8199946: Move load/store and encode/decode out of oopDesc

Stefan Karlsson stefan.karlsson at oracle.com
Fri Mar 23 15:54:46 UTC 2018


Hi Thomas,

On 2018-03-23 16:50, Thomas Schatzl wrote:
> Hi,
> 
>    looks good with minor caveats:
> 
> There is another at
> psScavenge.inline.hpp
>   111       RawAccess<>::oop_store(p, new_obj);

I'll fix.

> 
> and
> metaspaceShared.cpp
> 1940       RootAccess<IN_ARCHIVE_ROOT>::oop_store(p,
> CompressedOops::decode(o));
> 
> has been a decode_heap_oop_not_null()


I'll fix.

> 
> ------
> 
> Depending on whether you think this fits this change, it would be nice
> to fix some code in the following locations. Otherwise I can do a
> separate change.
> 
> g1OopClosures.inline.hpp:
>   244     RawAccess<>::oop_store(p, forwardee);
> 
> This could be a RawAccess<OOP_NOT_NULL>::oop_store()
> 
> g1ParScanThreadState.inline.hpp:
>    49     RawAccess<>::oop_store(p, obj);
> 
> Same here.

I had changes to do this, but I decided to revert those changes for this 
patch. A new RFE for this would be good.

Thanks,
StefanK

> 
> Thanks,
>    Thomas
> 
> 
> 
> On Fri, 2018-03-23 at 13:27 +0100, Stefan Karlsson wrote:
>> On 2018-03-23 13:28, Erik Österlund wrote:
>>> Hi Stefan,
>>>
>>> Looks good. There is one remaining OOP_NOT_NULL in
>>> psScavenge.inline.hpp, but I do not need another webrev.
>>
>>
>> Fixed. Thanks for the review!
>>
>> StefanK
>>
>>>
>>> Thanks,
>>> /Erik
>>>
>>> On 2018-03-22 20:28, Stefan Karlsson wrote:
>>>> Erik found two places where I didn't use OOP_NOT_NULL, where we
>>>> previously used _not_null functions.
>>>>
>>>> diff --git a/src/hotspot/share/gc/cms/parNewGeneration.cpp
>>>> b/src/hotspot/share/gc/cms/parNewGeneration.cpp
>>>> --- a/src/hotspot/share/gc/cms/parNewGeneration.cpp
>>>> +++ b/src/hotspot/share/gc/cms/parNewGeneration.cpp
>>>> @@ -734,7 +734,7 @@
>>>>         oop new_obj = obj->is_forwarded()
>>>>                         ? obj->forwardee()
>>>>                         :
>>>> _g->DefNewGeneration::copy_to_survivor_space(obj);
>>>> -      RawAccess<>::oop_store(p, new_obj);
>>>> +      RawAccess<OOP_NOT_NULL>::oop_store(p, new_obj);
>>>>       }
>>>>       if (_gc_barrier) {
>>>>         // If p points to a younger generation, mark the card.
>>>> diff --git a/src/hotspot/share/gc/cms/parOopClosures.inline.hpp
>>>> b/src/hotspot/share/gc/cms/parOopClosures.inline.hpp
>>>> --- a/src/hotspot/share/gc/cms/parOopClosures.inline.hpp
>>>> +++ b/src/hotspot/share/gc/cms/parOopClosures.inline.hpp
>>>> @@ -52,7 +52,7 @@
>>>>         new_obj =
>>>> ((ParNewGeneration*)_g)->copy_to_survivor_space(_par_scan_state,
>>>> obj, obj_sz, m);
>>>>       }
>>>> -    RawAccess<>::oop_store(p, new_obj);
>>>> +    RawAccess<OOP_NOT_NULL>::oop_store(p, new_obj);
>>>>     }
>>>>   }
>>>>
>>>> StefanK
>>>>
>>>> On 2018-03-22 17:01, Stefan Karlsson wrote:
>>>>> Hi,
>>>>>
>>>>> This patch needs Erik's change to the LoadProxies:
>>>>> http://mail.openjdk.java.net/pipermail/hotspot-gc-dev/2018-Marc
>>>>> h/021504.html
>>>>>
>>>>>
>>>>> to build on fastdebug.
>>>>>
>>>>> Here's a rebased patch:
>>>>> http://cr.openjdk.java.net/~stefank/8199946/webrev.02/
>>>>>
>>>>> Thanks,
>>>>> StefanK
>>>>>
>>>>> On 2018-03-21 18:27, Stefan Karlsson wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> Please review this patch to get rid of the
>>>>>> oopDesc::load/store
>>>>>> functions and to move the oopDesc::encode/decode functions to
>>>>>> a new
>>>>>> CompressedOops subsystem.
>>>>>>
>>>>>> http://cr.openjdk.java.net/~stefank/8199946/webrev.01
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8199946
>>>>>>
>>>>>> When the Access API was introduced many of the usages of
>>>>>> oopDesc::load_decode_heap_oop, and friends, were replaced by
>>>>>> calls
>>>>>> to the Access API. However, there are still some usages of
>>>>>> these
>>>>>> functions, most notably in the GC code.
>>>>>>
>>>>>> This patch is two-fold:
>>>>>>
>>>>>> 1) It replaces the oopDesc load and store calls with
>>>>>> RawAccess
>>>>>> equivalents.
>>>>>>
>>>>>> 2) It moves the oopDesc encode and decode functions to a
>>>>>> new,
>>>>>> separate, subsystem called CompressedOops. A future patch
>>>>>> could even
>>>>>> move all the Universe::_narrow_oop variables over to
>>>>>> CompressedOops.
>>>>>>
>>>>>> The second part has the nice property that it breaks up a
>>>>>> circular
>>>>>> dependency between oop.inline.hpp and access.inline.hpp.
>>>>>> After the
>>>>>> change we have:
>>>>>>
>>>>>> oop.inline.hpp includes:
>>>>>>     access.inline.hpp
>>>>>>     compressedOops.inline.hpp
>>>>>>
>>>>>> access.inline.hpp includes:
>>>>>>     compressedOops.inline.hpp
>>>>>>
>>>>>> Thanks,
>>>>>> StefanK
>>>>
>>>>
> 


More information about the hotspot-dev mailing list