Multiple this$1 fields when mixing subclassing and inner classes

Stefan Reich stefan.reich.maker.of.eye at googlemail.com
Mon Sep 9 22:31:14 UTC 2019


> I'm curious as to where there has ever been deliberation of this?

Uh.. "whether", of course.

On Tue, 10 Sep 2019 at 00:24, Stefan Reich <
stefan.reich.maker.of.eye at googlemail.com> wrote:

> Consider these classes:
>
> class A {
>   class InnerA {}
> }
> class B extends A {
>   class InnerB extends InnerA {}
> }
>
> When I run some introspection on B.InnerB, I find HotSpot producing this
> object layout:
>
> Size of object B$InnerB: 24 bytes
>   Field A$InnerA . this$1 is at offset 12
>   Field B$InnerB . this$1 is at offset 16
>
> So the object has *two* outer references, one of type A and one of type B.
>
> That is all fair and good, but: These two references *will always point
> to the same object*. This follows from the syntactic rules on the Java
> level. (<< Crucial part of the argument, so - is this correct?)
>
> So, the question is: Wouldn't it save some RAM to just have one "this$1"
> field?
>
> The only downside would be that accesses to this$1 from code inside InnerB
> would require a cast, as the remaining this$1 field would formally only
> have type A.
>
> I'm curious as to where there has ever been deliberation of this?
>
> Best regards,
> Stefan
>
> --
> Stefan Reich
> BotCompany.de // Java-based operating systems
>


-- 
Stefan Reich
BotCompany.de // Java-based operating systems


More information about the hotspot-dev mailing list