Hi Claes,
How much difference are you observing?
If it is small perhaps it’s worth waiting to see if there are much larger
improvements we can make, as the non-obvious tight coupling also has it’s own
cost in terms of maintenance.
Can we avoid shared secrets by doing the following?
@HotSpotIntrinsicCandidate
public static Byte valueOf(byte b) {
if (b == 0) return ZERO;
final int offset = 128;
return ByteCache.cache[(int)b + offset];
}
Paul.
> On 8 Nov 2015, at 14:43, Claes Redestad <[email protected]> wrote:
>
> Hi,
>
> indy eagerly creates and initializes all integral type caches
> (Byte$ByteCache, Short$ShortCache) which has a small, measurable
> impact to jake startup and footprint. Exposing ZERO constants from Byte,
> Character, etc which are guaranteed to be identical to what's
> returned from each respective valueOf(0) enables j.l.i. to initialize without
> eagerly creating these caches:
>
> webrev: http://cr.openjdk.java.net/~redestad/8141678/webrev.01
> bug: https://bugs.openjdk.java.net/browse/JDK-8141678
>
> Making these constants public would allow us to not fetch them via reflection
> for a tiny, incremental startup improvement, but I don't
> think the constants carry their own weight to motivate them becoming part of
> public API.
>
> Testing: verified startup/footprint improvement, various jtreg tests
>
> /Claes