RFR: 8142334: Improve lazy initialization of java.lang.invoke
Claes Redestad
claes.redestad at oracle.com
Mon Nov 9 19:48:38 UTC 2015
Hi Peter,
nice catch:
http://cr.openjdk.java.net/~redestad/8142334/webrev.02
/Claes
On 2015-11-09 20:26, Peter Levart wrote:
> Hi Claes,
>
> I see you apply this pattern consistently:
>
> private static NamedFunction getConstantFunction(int idx) {
> NamedFunction function = FUNCTIONS[idx];
> if (function != null) {
> return function;
> }
> return makeConstantFunction(idx);
> }
>
>
> private static NamedFunction makeConstantFunction(int idx) {
> try {
> switch (idx) {
> case NF_internalMemberName:
> return setCachedFunction(idx, new
> NamedFunction(DirectMethodHandle.class
> .getDeclaredMethod("internalMemberName", Object.class)));
> ...
>
>
>
> You could move a repeatable call to setCachedFuncion from individual
> cases of makeConstantFunction to getConstantFunction:
>
> private static NamedFunction getConstantFunction(int idx) {
> NamedFunction function = FUNCTIONS[idx];
> if (function != null) {
> return function;
> }
> return setCachedFunction(idx, makeConstantFunction(idx));
> }
>
> private static NamedFunction makeConstantFunction(int idx) {
> try {
> switch (idx) {
> case NF_internalMemberName:
> return new
> NamedFunction(DirectMethodHandle.class.getDeclaredMethod("internalMemberName",
> Object.class));
> ...
>
>
>
> Regards, Peter
>
> On 11/09/2015 06:51 PM, Claes Redestad wrote:
>> Hi,
>>
>> across java.lang.invoke there are a number of inner Lazy classes
>> whose purpose is to defer initialization of various internally used
>> NamedFunctions and MethodHandles until first usage. The issue is that
>> once *any* function or handle in these classes are referenced they're
>> all initialized, which somewhat defeats the purpose.
>>
>> By moving to per-MethodHandle and per-NamedFunction lazy
>> initialization, similar to existing code in
>> java.lang.invoke.Invokers, we improve the laziness generally: for a
>> jigsaw Hello World the number of LambdaForms created drops from 74 to
>> 46, reducing heap occupancy for a minimal application and measurably
>> improving startup time.
>>
>> Webrev: http://cr.openjdk.java.net/~redestad/8142334/webrev.01
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8142334
>>
>> /Claes
>>
>
More information about the core-libs-dev
mailing list