[10] RFR: 8178387: Reduce memory churn when creating java.lang.invoke entities

Claes Redestad claes.redestad at oracle.com
Mon Apr 10 17:31:16 UTC 2017


Hi,


On 2017-04-10 18:48, Paul Sandoz wrote:
> Hi,
>
> Looks good.

Thanks!

>
> LambdaForm.java
> --
>
>   851         MethodType invokerType = methodType();
>   852         assert(vmentry == null || vmentry.getMethodType().basicType().equals(invokerType));

This one was accidentally removed, will put it back (without the local 
invokerType var).

>
>>
> 1183             assert(checkArgumentTypes(arguments, methodType()));
>
>>
> 1201                 assert(checkArgumentTypes(arguments, methodType()));

The checkArgumentTypes method has been shortcutted for quite some time 
(if (true) return true;),
so the asserts aren't doing anything but making -Xcomp tests run slower 
and emit a lot of warnings
in my IDE.

>
> I am always wary of removing asserts, do you think these are redundant?
>
>
>>
>  From this and the last fixes how much have you cut from the start up time?

Don't expect too much! These two add up to about ~60k fewer bytecode 
executed to bootstrap j.l.invoke
and run a trivial lambda, which is about 13% of the total and shows up 
as around or somewhat less than a
millisecond improvement on my machine (out of the ~19-20ms it now takes 
to bootstrap and execute the
first lambda on my machine).

Thanks!

/Claes

>
> Paul.
>
>> On 10 Apr 2017, at 08:37, Claes Redestad <claes.redestad at oracle.com> wrote:
>>
>> Hi,
>>
>> another startup optimization for java.lang.invoke, this one collecting a set of small fixes I've been wanting to get done for a while, including:
>>
>> - no need to generate the signature strings in BoundMethodHandle.makeCbmhCtor
>> - trusted MethodType lookups could be promoted without constructing new objects
>> - InvokerBytecodeGenerator: creation of className and sourceFile can be done lazily, which reduces String allocations in those cases where there's a pre-generated form to be found
>> - MethodType lookup done twice when looking up pregenerated members (oops!)
>> - A lot of vararg array creation during startup in various places. A larger rewrite could be warranted, but we can some startup gain by simply constant-izing oft-used constant arguments such as MethodType.invokerType
>>
>> Webrev: http://cr.openjdk.java.net/~redestad/8178387/jdk.01/
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8178387
>>
>> Test: java.lang.invoke jtreg tests, verified each change in this patch (and JDK-8178384) reduces the amount of bytecode executed during lambda bootstrap.
>>
>> Thanks!
>>
>> /Claes



More information about the core-libs-dev mailing list