RFR: 8311639: Replace currentTimeMillis() with nanoTime() in jtreg/gc
Leo Korinth
lkorinth at openjdk.org
Fri Aug 18 08:59:25 UTC 2023
On Thu, 17 Aug 2023 17:46:28 GMT, Albert Mingkun Yang <ayang at openjdk.org> wrote:
>> I have removed usage of `currentTimeMillis()` in jtreg/gc as `currentTimeMillis()` is not monotonic. It is mostly changing from milliseconds to nanoseconds. In certain places, I have changed the code from something like `(instant1 < instant2)` to `(instant1 - instant2 < 0)` It might look like I am removing instant2 from both sides of the inequality and the result ought to be the same, but due to overflow arithmetic, the change should be better if nanoseconds where to overflow. I have also removed some loops where the loop is doing nothing except sleeping. I somewhat shortened the string in the key of a hash map because the nanosecond value made the string too long for the heap size.
>>
>> All tests within jtreg/gc passes.
>
> test/hotspot/jtreg/gc/stress/systemgc/TestSystemGC.java line 80:
>
>> 78: public void run() {
>> 79: while (!shouldExit()) {
>> 80: String prefix = "long" + (System.nanoTime() % 10000); // limit to 4 digits after changing from milliseconds to nanoseconds, else the key will use more memory
>
> Is this used to calculate elapsed time? If not, I think using `currentTimeMillis` is fine.
It is not to calculate elapsed time. It is to create a unique(ish) key for a hash table. The new code does not guarantee a unique value, but then neither did the old.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/15331#discussion_r1298196377
More information about the hotspot-gc-dev
mailing list