RFR: 8227054: ServiceThread needs to know about all OopStorage objects

Per Liden per.liden at oracle.com
Fri Aug 2 15:09:51 UTC 2019


Hi Erik & Kim,

On 8/2/19 3:29 PM, Erik Österlund wrote:
> Hi Kim,
> 
> I had a look at the patch. Personally I'm not a big fan of using macro 
> tricks. Perhaps because it's in caps, which makes me read the code in my 
> head with a loud screaming voice, with a slightly angry italian accent. 
> And I don't even know italian - it is crazy.

I kind of had the same reaction. I stared at the initial patch for a 
good 30 minutes and then gave up. That x-macros makes this very 
difficult to read and follow, and it doesn't look like they actually 
solve anything important.

> 
> Anyway, I have come up with an alternative solution that is worth 
> considering, I think, due to its simplicity.
> 
> Step 1: Move all oop storages to a new file, and add a utility for 
> iterating over them:
> 
> webrev: http://cr.openjdk.java.net/~eosterlund/8227054/webrev.00/
> 
> This is quite straight forward. A new OopStorageSet AllStatic class has 
> all oop storages, and offers some iterators.
> 
> Step 2: Change weak processor to automatically process oop storages:
> 
> webrev:http://cr.openjdk.java.net/~eosterlund/8227054/webrev.01/
> incremental: http://cr.openjdk.java.net/~eosterlund/8227054/webrev.00_01/
> 
> I noticed that the weak processor has an enum with all phases, but 
> pretty much always dealt with oop storage phases differently, with 
> various checks if it is an oop storage phase, do something different, or 
> assert that things are only done in an oop storage phase.
> So I made processing of oop storages use the new iterators instead, and 
> opt out from the enum macro dance.
> 
> To add a new OopStorage, you add it to the OopStorageSet by plugging in 
> a declaration in OopStorageSet::StrongOopStorageSet or 
> OopStorageSet::WeakOopStorageSet depending on strength, stick in a 
> getter if you need direct access, and create an instance in 
> OopStorageSet::initialize() - 3 lines in total. This is 2 lines less 
> than your approach, but I think that is okay for the added simplicity.
> 
> In total, this patch removes more code than it introduces.
> 
> Thoughts?

Thanks a lot Erik, for taking the time to do this proposal. This looks a 
lot more straight forward and sane to me.

src/hotspot/share/runtime/jniHandles.cpp
----------------------------------------
  186 void JNIHandles::weak_oops_do(OopClosure* f) {
  187   OopStorageSet::weak_jni();
  188 }

Missing "->weak_oops_do(f)" there.

Other than than that, I'd be happy with this proposal.

cheers,
Per

> 
> Thanks,
> /Erik
> 
> 
> On 2019-07-26 22:39, Kim Barrett wrote:
>>> On Jul 26, 2019, at 10:38 AM, coleen.phillimore at oracle.com wrote:
>>>
>>>
>>> I like this change!
>>>
>>> http://cr.openjdk.java.net/~kbarrett/8227054/open.00/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp.udiff.html 
>>>
>>>
>>> Can you remove some #include directives from the GC code since the 
>>> oop storages are coming from oopStorages?
>>>
>>> http://cr.openjdk.java.net/~kbarrett/8227054/open.00/src/hotspot/share/prims/resolvedMethodTable.cpp.udiff.html 
>>>
>>>
>>> Does this still need to #include oopStorage.inline.hpp ?
>>>
>>> http://cr.openjdk.java.net/~kbarrett/8227054/open.00/src/hotspot/share/prims/resolvedMethodTable.hpp.frames.html 
>>>
>>>
>>> This doesn't seem to need to include oopStorage.hpp.  Might be others 
>>> too.
>> Thanks for suggesting some #include trimming.  I did some cleanup.
>>
>>> http://cr.openjdk.java.net/~kbarrett/8227054/open.00/src/hotspot/share/gc/shared/oopStorages.hpp.html 
>>>
>>>
>>> I thought our compilers were tolerant of a trailing comma in 
>>> enumerations?
>> Solaris Studio doesn't like trailing commas in enums.
>>
>>> The macros aren't bad though.  It seems like it would be easy to add 
>>> a new OopStorage if we wanted to, but it would be better to use an 
>>> existing vm weak or vm strong oop storage, if we wanted to move more 
>>> oops into an oop storage (say for JFR).
>> Right.  Also easy to remove one.  (Someone told me there are ideas
>> afloat that might remove the need for the ResolvedMethodTableWeak
>> storage object.)
>>
>> I don't expect the set to be changing frequently.  But it's a bit of a
>> pain to track down all the right places.  (Even still, because the GCs
>> still have explicit knowledge of the full set, though this change
>> provides tools to address that.)
>>
>>> This change looks great apart from trying to remove more #includes.
>> Thanks.
>>
>> New webrevs:
>> full: http://cr.openjdk.java.net/~kbarrett/8227054/open.01/
>> incr: http://cr.openjdk.java.net/~kbarrett/8227054/open.01.inc/
>>
>>
> 


More information about the hotspot-dev mailing list