RFR(M): 8044775: Improve usage of umbrella header atomic.inline.hpp.
Stefan Karlsson
stefan.karlsson at oracle.com
Mon Jun 23 13:27:02 UTC 2014
On 2014-06-23 11:54, Lindenmaier, Goetz wrote:
> Hi Stefan,
>
> thanks for the review!
>
> I still need a sponsor for this.
> Could you please push this change?
Sure. Your change has been pushed to hs-gc:
http://hg.openjdk.java.net/jdk9/hs-gc/hotspot/rev/b596a1063e90
Cheers,
StefanK
>
> Thanks,
> Goetz.
>
>
> -----Original Message-----
> From: Stefan Karlsson [mailto:stefan.karlsson at oracle.com]
> Sent: Dienstag, 10. Juni 2014 10:21
> To: Lindenmaier, Goetz; hotspot-dev at openjdk.java.net
> Subject: Re: RFR(M): 8044775: Improve usage of umbrella header atomic.inline.hpp.
>
>
> On 2014-06-05 22:23, Lindenmaier, Goetz wrote:
>> Hi Stefan,
>>
>> thanks for the thorough review!
>>
>>> Thanks again for cleaning up the include files.
>> I checked the other includes, I would like to do this for os_<os>.inline.hpp, too.
>> That include cascade is shorter, but used in around 30 files.
>> Other more prominent cascades are
>> bytes_<cpu>.hpp (12 cascades),
>> ad_<cpu>.hpp (10 cascades),
>> nativeInst_<cpu>.hpp (8)
>> vmreg.inline_<cpu>.hpp (7)
>> As we have another 3 cpus (zArch, parisc, ia64), that would clean up our code
>> nicely ;)
>>
>> Back to this change:
>>
>> I moved the Atomics in StringDedup.hpp as you requested.
>> I removed the include in markSweep.inline.hpp.
>> I moved the include in oop.pcgc.inline.hpp up.
>> I moved the debug methods in gcLocker.hpp to the cpp file.
>>
>>> This is a lot of noise just to get rid of a call to the the
>>> CompiledICHolder constructor in product builds. Is it really worth it?
>> I think not. Moved to cpp file.
>>
>> About adding the header to precompiled.hpp: I don't really care,
>> I just follow the current pattern. As there were no other comments
>> on your request in the last change, I removed it this time.
>>
>> Here is the new webrev:
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.01
> Thanks.
>
> Looks good to me.
>
> StefanK
>
>> Best regards,
>> Goetz.
>>
>>
>> -----Original Message-----
>> From: Stefan Karlsson [mailto:stefan.karlsson at oracle.com]
>> Sent: Donnerstag, 5. Juni 2014 10:38
>> To: Lindenmaier, Goetz; hotspot-dev at openjdk.java.net
>> Subject: Re: RFR(M): 8044775: Improve usage of umbrella header atomic.inline.hpp.
>>
>> Hi Goetz,
>>
>> Thanks again for cleaning up the include files.
>>
>> On 2014-06-04 15:59, Lindenmaier, Goetz wrote:
>>> Hi,
>>>
>>> I would like to do another change cleaning up the includes of
>>> .inline.hpp files from the os_cpu directories.
>>>
>>> Please review and test this change. I please need a sponsor.
>>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/gc_implementation/g1/g1StringDedup.hpp.udiff.html
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/gc_implementation/g1/g1StringDedup.cpp.udiff.html
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp.udiff.html
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/gc_implementation/g1/g1StringDedupThread.cpp.udiff.html
>>
>> I think it would be good to move the Atomic calls out from the
>> g1StringDedup.hpp to g1StringDedup.cpp. I talked to Per, the author of
>> StringDedup, and he would be fine with that move.
>> I moved the debug methods in gcLocker.hpp to the cpp file.
>>
>>
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/gc_implementation/shared/markSweep.inline.hpp.frames.html
>>
>> 32 #if INCLUDE_ALL_GCS
>> 33 #include "gc_implementation/g1/g1StringDedup.hpp"
>> 34 #include "gc_implementation/parallelScavenge/psParallelCompact.hpp"
>> 35 #include "runtime/atomic.inline.hpp"
>> 36 #endif // INCLUDE_ALL_GCS
>>
>> Why was this include added? Was it becuase g1StringDedup.hpp was added?
>>
>>
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/gc_implementation/shared/mutableSpace.cpp.frames.html
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/oops/oop.pcgc.inline.hpp.frames.html
>>
>> 25 #include "precompiled.hpp"
>> 26 #include "utilities/macros.hpp"
>> 27 #if INCLUDE_ALL_GCS
>> 28 #include "gc_implementation/shared/mutableSpace.hpp"
>> 29 #include "gc_implementation/shared/spaceDecorator.hpp"
>> 30 #include "oops/oop.inline.hpp"
>> 31 #include "runtime/safepoint.hpp"
>> 32 #include "runtime/thread.hpp"
>> 33 #endif // INCLUDE_ALL_GCS
>> 34 #include "runtime/atomic.inline.hpp"
>>
>> Could you place the new includes together with the includes before the
>> INCLUDE_ALL_GCS block?
>>
>>
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/memory/gcLocker.hpp.udiff.html
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/memory/gcLocker.inline.hpp.udiff.html
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/runtime/safepoint.cpp.udiff.html
>>
>> + inline static void increment_debug_jni_lock_count();
>> + inline static void decrement_debug_jni_lock_count();
>>
>> This is debugging code, so it would be better to move it to the .cpp file.
>>
>>
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/oops/compiledICHolder.hpp.udiff.html
>>
>> 54 #ifdef ASSERT
>> 55 CompiledICHolder(Method* method, Klass* klass);
>> 56 #else
>> 57 CompiledICHolder(Method* method, Klass* klass)
>> 58 : _holder_method(method), _holder_klass(klass) {};
>> 59 #endif
>> 60
>> 61 ~CompiledICHolder() NOT_DEBUG_RETURN;
>>
>> This is a lot of noise just to get rid of a call to the the
>> CompiledICHolder constructor in product builds. Is it really worth it?
>>
>>
>> http://cr.openjdk.java.net/~goetz/webrevs/8044775-atomInc/webrev.00/src/share/vm/precompiled/precompiled.hpp.udiff.html
>>
>> # include "runtime/atomic.hpp"
>> +# include "runtime/atomic.inline.hpp"
>>
>> I still think this is a bad idea. It will just make it more likely that
>> someone building with precompiled headers will forget to include
>> atomic.inline.hpp, and we would have to clean it up later when we found
>> out that it breaks some platform outside of Oracle's test matrix.
>>
>> thanks,
>> StefanK
>>
>>> This change improves the usage of the umbrella header atomic.inline.hpp.
>>> It removes includes of this header in files where it's not needed,
>>> and adds it in all .cpp and .inline.hpp files where a method of
>>> Atomic declared 'inline' is used.
>>>
>>> Also, the change moves some calls to such methods from .hpp files to
>>> .inline.hpp files. In case of ASSERT code it moves the calls
>>> to .cpp files.
>>>
>>> A row of headers still contain calls to inline methods of Atomic,
>>> which I don't want to move as no appropriate .inline.hpp file is existing:
>>>
>>> src/share/vm/compiler/compileBroker.hpp
>>> src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp
>>> src/share/vm/gc_implementation/g1/g1StringDedup.hpp
>>> src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp
>>> src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
>>> src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp
>>> src/share/vm/memory/specialized_oop_closures.hpp
>>> src/share/vm/oops/methodData.hpp
>>> src/share/vm/runtime/safepoint.hpp
>>> src/share/vm/services/lowMemoryDetector.hpp
>>> src/share/vm/services/memTracker.hpp
>>> src/share/vm/utilities/taskqueue.hpp
>>>
>>> I compiled and tested this without precompiled headers on
>>> linuxx86_64, linuxppc64, windowsx86_64, solaris_sparc64, solaris_sparc32, darwinx86_64, aixppc64
>>> in opt, dbg and fastdbg versions.
>>>
>>> Best regards,
>>> Goetz.
More information about the hotspot-dev
mailing list