RFR: 8222852: Reduce String concat combinator tree shapes by folding constants into prependers
Peter Levart
peter.levart at gmail.com
Fri Apr 26 09:19:46 UTC 2019
On 4/26/19 11:08 AM, Peter Levart wrote:
> I wonder if it is even possible to create a test that would do
> something like the following:
>
> String s = ...
> String s2 = s + "const1" + "const2" + s;
>
> ...since javac concatenates consecutive constants into a single
> constant. So this actually becomes:
>
> String s2 = s + "const1const2" + s;
>
> ...in bytecode.
Well, you don't really have to assemble the appropriate bytecodes. You
could just invoke the bootstrap method directly in the test, like:
CallSite cs = StringConcatFactory.makeConcatWithConstants(
MethodHandles.lookup(),
"concat",
MethodType.methodType(String.class, String.class,
String.class),
"\u0001\u0002\u0002\u0001",
"C", "D"
);
MethodHandle mh = cs.dynamicInvoker();
String res = (String) mh.invokeExact("A", "B");
assert "ACDB".equals(res);
Regards, Peter
More information about the core-libs-dev
mailing list