[lworld] RFR: JDK-8252061 [lword] Support Object::toString for inline type

John R Rose jrose at openjdk.java.net
Thu Aug 20 02:48:29 UTC 2020


On Thu, 20 Aug 2020 01:40:40 GMT, Mandy Chung <mchung at openjdk.org> wrote:

> This adds the `Object::toString` support for inline classes.  This will replace the need
> for javac to generate the `toString` method to call the bootstrap method.
> 
> JDK-8206077 will revisit the overlap of `ValueBootstrapMethods` and `ObjectMethods`.
> 
> This patch also removes the private `isSubstituable0` method and makes sure
> that `isSubstitutable` does not have `acmp` instruction and can be invoked by VM.

A couple of comments:

1. In order for this to perform well, the code for each generated toString method needs to be JIT-ted, and to be
reached quickly (or even inlined) via ClassValue::get.  Optimization work (to be done later) should probably consider
[JDK-8238260](https://bugs.openjdk.java.net/browse/JDK-8238260).

2. We should try to handle Record subtypes the same way.  Putting funky bytecodes into classfiles, even using indy, is
worse than allowing Object::toString (and equals and hashCode) to vector through a specified, customized method, using
ClassValue::get.

3. I think it is reasonable to have special intrinsic logic in the JIT to hurry along the previous two steps, although
in the long run the JVM should have a good story (perhaps using ClassValue, perhaps not) for auto-expanded method
bodies.

-------------

PR: https://git.openjdk.java.net/valhalla/pull/155


More information about the valhalla-dev mailing list