Memory layout benefits of inline classes
Srikanth
srikanth.adayapalam at oracle.com
Tue May 5 07:18:49 UTC 2020
On 05/05/20 12:47 pm, Zheka Kozlov wrote:
> Can you please explain how can Optional become an inline class if
> inline classes are non-nullable? Doesn't it mean that every code like
> this will throw NPE after migration?
>
> Optional<String> opt = null;
Please study:
https://cr.openjdk.java.net/~briangoetz/valhalla/sov/02-object-model.html
for the evolving design.
Srikanth
<https://cr.openjdk.java.net/~briangoetz/valhalla/sov/02-object-model.html>
>
>
> вт, 5 мая 2020 г., 12:37 Srikanth <srikanth.adayapalam at oracle.com
> <mailto:srikanth.adayapalam at oracle.com>>:
>
>
>
> On 27/04/20 1:14 pm, Swaranga Sarma wrote:
> > The examples of the benefits of inline classes that I have seen
> in demos
> > are things like high allocation of data classes in a tight loop.
> I was
> > trying to understand how some of our existing code may benefit
> by using
> > inline classes which is different from the examples seen. I have the
> > following questions:
> >
> > 1. Optional: If we have a nullable members in a class, we would
> like to
> > return an Optional<T> in the accessor for that member unless we
> have a
> > reason to reduce the allocation. I recall somewhere that
> Optional might be
> > an inline type in the future and this concern may no longer be
> valid. Is my
> > understanding correct?
>
> Sorry for the delay in responding.
>
> It is the aspirational plan to be able to migrate certain JDK classes
> that are "value based classes" today. Prominent among them is
> Optional.
> Not all issues about the migration of such classes are solved
> today, but
> it is in the works.
> >
> > 2. CompletableFuture: Similar to Optional, is this a candidate for
> > potentially turning into an inline type?
>
> JDK classes that are migration candidates are often tagged as being
> "value-based" classes in their javadoc. I don't see CompletableFuture
> being identified as such - I didn't verify whether CompletableFuture
> fails to meet the criterial for being a value based class (See
> https://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html)
>
>
>
> The short answer is: when we arrive at the bridge, we will take a
> call
> on what classes may be meaningfully, compatibly and profitably
> migrated.
>
> Thus far I have heard of only Optional and various date and time
> related
> classes.
>
> >
> > 3. Regular data classes: In a lot of our code bases, we have
> data classes
> > that look like:
> > class Identifier {
> > final @NonNull Name name;
> > final @NonNull Id id;
> > }
> >
> > class Name {
> > final @NonNull String value;
> > }
> >
> > class Id {
> > final @NonNull String value;
> > }
> >
> > We create instances like these and pass these around to other
> methods.
> > Those methods access the necessary values using the access
> methods like
> > identifier.name <http://identifier.name>().value() or
> identifier.id <http://identifier.id>().value(). These classes are
> > probably good candidates for migrating to records. But I was also
> > interested to understand if we also made them inline classes
> what memory
> > layout benefits would we get. Would the pointer de-referencing
> problem go
> > away in such cases?
> >
> > To put it in another way, most of our data classes boil down to
> Strings,
> > and assuming String will not become an inline type, would there
> be any
> > memory-layout benefits of making such classes inline?
>
> Using your Id or Name classes as example, these instances could
> themselves be passed around as inline values - eliminating one
> level of
> pointer dereferencing (to reach the value reference). The string's
> content itself is going is (continue to involve) a level of
> dereferencing.
>
> HTH,
> Srikanth
> >
> > Regards
> > Swaranga
>
More information about the valhalla-dev
mailing list