RFR: 8166365: Small immutable collections should provide optimized implementations when possible
Stuart Marks
stuart.marks at oracle.com
Thu Jan 12 19:44:58 UTC 2017
On 1/11/17 2:30 PM, Louis Wasserman wrote:
> I haven't followed this much, but an observation: in Guava, we avoided
> creating lots of specialized implementations for small collections, because
> the JVM, at least at the time, had a sweet spot for bimorphic dispatch:
> method calls where the real implementation would be one of two options, and
> that the cost blew up after you hit three, and we considered hitting that
> sweet spot more worthwhile than the slightly smaller overhead for
> collections that were already small.
>
> As a result, many of our immutable collection implementations converged on
> having two implementations: one single-element implementation, and one
> implementation for everything else (0, 2, 3... but not 1), and then we had
> a singleton static constant object for the 0-element case.
>
> I don't know if that calculus has changed, but it seemed worth mentioning.
It seems worth keeping an eye on this. I'll let the Hotspot performance guys say
whether megamorphic calls become an issue. At this point it seems like we're
working on more fundamental optimizations, such as the stuff that Claes just pushed.
There is also some excess array copying that needs to be cleaned up, and the
spliterators still need to be optimized....
If we were to try to reduce the implementations down to two, I'd say that we'd
want a field-based implementation and an array-based implementation. Having a
field-based implementation avoids a dependent load and a separate object header
for the array. But the space savings of 0-field and 1-field classes over a
2-field class aren't so large, so maybe these could be consolidated if warranted.
Fortunately :-) the APIs are designed so that we have complete freedom to
rearrange the implementations compatibly in the future, as we get more
information, or as the various space/performance tradeoffs change.
s'marks
More information about the core-libs-dev
mailing list