----- Mail original -----
> De: "Claes Redestad" <claes.redes...@oracle.com>
> À: "Remi Forax" <fo...@univ-mlv.fr>
> Cc: "core-libs-dev" <core-libs-dev@openjdk.java.net>
> Envoyé: Vendredi 29 Mai 2020 18:10:40
> Objet: Re: RFR: 8246152: Improve String concat bootstrapping

> Hi,
> 
> will deal with your suggestions soon, separately. :-)
> 
> On 2020-05-29 17:51, Remi Forax wrote:
>> 
>> Can you explain me, what rebind is exactly ?
>> 
> 
> MH.rebind() wraps any kind of MH as a BoundMethodHandle, which
> is necessary to subject it to transforms.
> 
>     /** Require this method handle to be a BMH, or else replace it with
> a "wrapper" BMH.
>      *  Many transforms are implemented only for BMHs.
>      *  @return a behaviorally equivalent BMH
>      */
>     abstract BoundMethodHandle rebind();
> 
> On the DMHs we lookup rebind() will return a very simple BMH, which will
> return itself on the rebind() that will happen when doing transforms,
> e.g. in insertArguments (don't mind the "makeReinvoker": complex BMHs
> create chains from one another so that each partial expression doesn't
> grow too unwieldy):
> 
>     @Override
>     BoundMethodHandle rebind() {
>         if (!tooComplex()) {
>             return this;
>         }
>         return makeReinvoker(this);
>     }
> 
> For those cases where we're caching a MH that will always be used in a
> transform - like most of the things we use when building up the MH tree
> in SCF - doing the rebind() pre-emptively means we move an allocating
> rebind from the common path to the once-per-MH setup step, while the
> subsequent rebinds will be trivial and non-allocating.
> 
> Hope this makes sense!

yes, thanks.

> 
> /Claes

Rémi

Reply via email to