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

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Mon Nov 9 12:13:35 UTC 2015


I don't think Wrapper.zero identity matters (e.g. see 
MethodHandles.constant [1] or InvokerBytecodeGenerator.emitConst).

So, you can considerably simplify your code by allocating fresh wrapper 

Best regards,
Vladimir Ivanov

[1] public static
     MethodHandle constant(Class<?> type, Object value) {
             if (w.zero().equals(value))
                 return zero(w, type);

On 11/8/15 4: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.
> Testing: verified startup/footprint improvement, various jtreg tests
> /Claes

More information about the core-libs-dev mailing list