RFR (S) 8235765: Use of the long type should be avoided in shared code
Vladimir Kozlov
vladimir.kozlov at oracle.com
Wed Aug 12 17:25:27 UTC 2020
Hi Coleen,
I think it is safe to use 'uint' (uint32_t) for all counts in sweeper.
What is a story about using int64_t vs jlong? And others *_t vs j* types.
Also you need to look on JFR code which collect these data:
src/hotspot//share/jfr/periodic/jfrPeriodic.cpp:
event.set_methodReclaimedCount(NMethodSweeper::total_nof_methods_reclaimed());
src/hotspot//share/jfr/metadata/metadata.xml: <Field type="int" name="methodReclaimedCount" label="Methods Reclaimed" />
And I found that metadata.xml have several 'long' uses too:
src/hotspot//share/jfr/metadata/metadata.xml: <Field type="long" contentType="millis" name="peakTimeSpent"
label="Peak Time" />
Looking on codecache code and sweeper and I see a lot of inconsistencies in used types :(
May be we need an other (compiler) RFE to clean that up.
Regards,
Vladimir K
On 8/12/20 10:00 AM, Coleen Phillimore wrote:
>
>
> On 8/12/20 12:19 PM, Lois Foltan wrote:
>> On 8/12/2020 11:21 AM, Coleen Phillimore wrote:
>>> Summary: Changed some long declarations to uint64_t/int64_t or unsigned int, depending on context.
>>>
>>> There are still 'long' declarations left in the code, but they should be changed by developers when working in that
>>> code and not as a blanket change. I didn't change a couple of longs in jfr/leakprofiler, for example. These are the
>>> ones I changed though with some explanation of why:
>>>
>>> src/hotspot/share/memory/filemap.hpp
>>>
>>> This can be negative so changed to int64_t.
>>>
>>> src/hotspot/share/runtime/mutex.cpp
>>>
>>> The PlatformMutex code takes jlong, which is signed, so that's why I changed these to int64_t.
>>>
>>> runtime/interfaceSupport.inline.hpp
>>>
>>> These counters are actually intervals so I changed them to unsigned int.
>>>
>>> src/hotspot/share/compiler/compileBroker.hpp
>>>
>>> _peak_compilation_time is signed because it is compared with jlong which is signed.
>>> Same with total_compilation_time - elapsedTimer.milliseconds() returns jlong.
>>>
>>> Tested with tier1-3. Tier1 on linux-x64-debug, windows-x64-debug, macosx-x64-debug, linux-aarch64-debug. Also built
>>> on: linux-arm32,linux-ppc64le-debug,linux-s390x-debug,linux-x64-zero.
>>>
>>> open webrev at http://cr.openjdk.java.net/~coleenp/2020/8235765.01/webrev
>>> bug link https://bugs.openjdk.java.net/browse/JDK-8235765
>>>
>>> Thanks,
>>> Coleen
>>
>> Hi Coleen,
>>
>> Looks good.
>>
>> - runtime/sweeper.hpp
>> This is the only file that I wondered why you changed long to int64_t for _total_nof_methods_reclaimed and
>> _total_nof_c2_methods_reclaimed. Note that the method NMethodSweeper::total_nof_methods_reclaimed returns an int.
>> Could both of these fields be changed to int instead?
>
> Hi Lois, Thank you for looking at this. Unfortunately, this was an outdated webrev, can you hit reload? I changed
> these fields to be uint64_t because they're never signed. It's likely that the number of methods is never greater than
> an int, but since it was long to begin with, I kept 64 bit until someone decides an 'int' is better. Since
> number_of_codecache_sweeps is uint64_t, which seems like a lot too, there could be that many nmethods reclaimed. I
> retested with windows just now to be sure.
>
> Thanks,
> Coleen
>
>
>>
>> Thanks,
>> Lois
>
More information about the hotspot-dev
mailing list