RFR: 8141678: sun.invoke.util.Wrapper eagerly initializes all integral type caches

Peter Levart peter.levart at gmail.com
Sun Nov 8 17:08:45 UTC 2015

On 11/08/2015 02:43 PM, Claes Redestad 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.

Do they have to be the same interned instances as returned from 
XXX.valueOf() methods? If not, then constructing new instances could be 
cheaper than using reflection which also triggers a bunch cache 
initialization (think cached Field object(s) on j.l.Class objects for 
wrapper classes).

Regards, Peter

> Testing: verified startup/footprint improvement, various jtreg tests
> /Claes

More information about the core-libs-dev mailing list