RFR: 8287522: StringConcatFactory: Add in prependers and mixers in batches [v7]
Remi Forax
forax at univ-mlv.fr
Fri Jun 3 12:48:37 UTC 2022
----- Original Message -----
> From: "Claes Redestad" <redestad at openjdk.java.net>
> To: "core-libs-dev" <core-libs-dev at openjdk.java.net>
> Sent: Friday, June 3, 2022 2:19:34 PM
> Subject: Re: RFR: 8287522: StringConcatFactory: Add in prependers and mixers in batches [v7]
> On Fri, 3 Jun 2022 11:19:04 GMT, ExE Boss <duke at openjdk.java.net> wrote:
>
>>> You would think that, but javac doesn't do anything fancy once you store to a
>>> local
>>>
>>> javap output for lines 108 through 111:
>>>
>>> 449: ldc #148 // float 0.1f
>>> 451: fstore 31
>>> 453: fload 31
>>> 455: invokedynamic #149, 0 // InvokeDynamic
>>> #4:makeConcatWithConstants:(F)Ljava/lang/String;
>>> 460: astore 32
>>> 462: fload 31
>>> 464: aload 4
>>> 466: invokedynamic #152, 0 // InvokeDynamic
>>> #7:makeConcatWithConstants:(FLjava/lang/String;)Ljava/lang/String;
>>> 471: astore 33
>>> 473: aload 4
>>> 475: fload 31
>>> 477: invokedynamic #155, 0 // InvokeDynamic
>>> #10:makeConcatWithConstants:(Ljava/lang/String;F)Ljava/lang/String;
>>
>> I guess it only happens for `final` locals.
>
> Yes, looks like javac does constant fold when the local is explicitly final:
>
> final float f = 0.1f;
> System.out.println("const folding? " + f);
>
> javap:
>
> 0: getstatic #2 // Field
> java/lang/System.out:Ljava/io/PrintStream;
> 3: ldc #3 // String const folding? 0.1
> 5: invokevirtual #4 // Method
> java/io/PrintStream.println:(Ljava/lang/String;)V
>
>
> Maybe this constant folding is something javac could be enhanced to do on
> effectively final locals, though I think we can defer adjusting
> `HelloClasslist` to break that optimization when that time comes.
The JLS defines final variables (and effectively final) here
https://docs.oracle.com/javase/specs/jls/se18/html/jls-4.html#jls-4.12.4
Constant expressions does not list effectively final variables as constant, only final variables
https://docs.oracle.com/javase/specs/jls/se18/html/jls-15.html#jls-15.29
>
> -------------
>
> PR: https://git.openjdk.java.net/jdk/pull/8855
regards,
Rémi
More information about the core-libs-dev
mailing list