On Wed, 8 Jun 2022 10:20:37 GMT, Claes Redestad <redes...@openjdk.org> wrote:

> To take optimal advantage of the pre-existing optimization for repeated 
> filters we could split the application of different types of stringifiers.
> The resulting difference in order of evaluation is not observable by 
> conventional means since all reference type share the same object 
> stringifier, and the others are filtering primitives (floats and doubles) 
> which have been passed by value already. 
> This change neutral on many concatenation expression shapes, but for any 
> complex expressions with interleaving float/double and reference parameters 
> it brings a straightforward reduction in rebinds and underlying LFs 
> generated. For example on the 
> [MixedStringCombinations.java](https://gist.github.com/cl4es/08fb581dece3a73e89bfa52337bc4248)
>  test there's a modest 2% reduction in total classes loaded with this change 
> (from 16209 to 15872)

src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 509:

> 507:                     doubleFilters = new MethodHandle[ptypes.length];
> 508:                 }
> 509:                 doubleFilters[i] = doubleStringifier();

Why do we have `ptypes[i] = int.class` for `int` and `short`, `ptypes[i] = 
String.class` for `float`, `double` and `Object` and none for `boolean` and 
`char`? 🧐


PR: https://git.openjdk.java.net/jdk/pull/9082

Reply via email to