RFR: [6904367]: (coll) IdentityHashMap is resized before exceeding the expected maximum size
Martin Buchholz
martinrb at google.com
Tue Jul 8 15:14:04 UTC 2014
So ... using 3*x is never wrong, and optimizing to x + (x << 1) is at best
only going to save a couple of cycles, so 3*x is the right choice except
for the most performance sensitive code.
In java.util, we tend to go further and write optimal code even when
hotspot is likely to make the same optimizations, partly under Doug Lea's
performance-obsessed influence.
Also, microbenchmarking is notoriously difficult.
If you've written a microbenchmark, it would be good to check it in
somewhere. I don't know what current openjdk practice is for that...
On Tue, Jul 8, 2014 at 7:01 AM, Ivan Gerasimov <ivan.gerasimov at oracle.com>
wrote:
>
> On 08.07.2014 4:44, Martin Buchholz wrote:
>
>
>
>
> On Mon, Jul 7, 2014 at 9:41 AM, Martin Buchholz <martinrb at google.com>
> wrote:
>
>> I'd like to offer an alternative version of this change. webrev coming
>> soon.
>>
>
> Here's the promised webrev.
>
> http://cr.openjdk.java.net/~martin/webrevs/openjdk9/IdentityHashMap-capacity/
>
> - Fixes a typo in the javadoc.
> - removes the "threshold" field (WAT, a cache to avoid multiplying by 3?)
> - optimizes 3*x into x + x << 1
>
>
> My personal preference would be x + x + x, but I thought JIT can do this
> kind of optimizations itself.
> Out of curiosity I've created a microbenchmark:
>
> Benchmark Mode Samples Score Score
> error Units
> o.s.MyBenchmark.testMethod_01_X3 avgt 200 5.900
> 0.041 ns/op
> o.s.MyBenchmark.testMethod_02_PPP avgt 200 6.029
> 0.035 ns/op
> o.s.MyBenchmark.testMethod_03_PSH avgt 200 5.907
> 0.071 ns/op
>
> On my machine 3*x and x + (x<<1) appear to be of the same speed (#1 and #3
> above).
> x + x + x (case #2) happens to be ~2% slower.
>
> Given the optimization doesn't introduce any speedup, wouldn't it be
> better to use 3*x for its clarity?
>
> Sincerely yours,
> Ivan
>
>
>
> - adds more test assertions
> - removes the unusual 4/3 slack space for expansion on deserialization.
>
> TODO: the test should be testng-ified, I think.
>
>
>
>
More information about the core-libs-dev
mailing list