How inner class object resides in memory?

后端 未结 3 1698
一向
一向 2020-12-15 01:41

Outer outer = new Outer();

an Object of Outer class is created on heap and reference variable points to it.

If I under

相关标签:
3条回答
  • 2020-12-15 02:10

    Each instance of an inner class holds a reference to an instance of its outer class. It's the reference that you get when you write Outer.this within one of the inner class's methods. The anonymous Outer instance won't be eligible for garbage collection unless all Inner instances associated with it are also eligible for garbage collection.

    0 讨论(0)
  • 2020-12-15 02:14

    Naturally, the inner holds on to strong references of the things it wants strong references to - like the other half of its instance variables which reside in Outer.

    0 讨论(0)
  • 2020-12-15 02:21

    An inner class contains a hidden reference to its outer class instance. That hidden reference keeps the outer class instance alive if there are no other references to it.

    To see this in action, take this source code and compile it:

    public class Outer {
        public class Inner {
        }
    }
    

    Now use the java class inspection tool javap to see the hidden reference:

    $ javap -p Outer\$Inner
    Compiled from "Outer.java"
    public class Outer$Inner {
      final Outer this$0;
      public Outer$Inner(Outer);
    }
    

    You'll see that there is a package-scope hidden reference called this$0 of type Outer - this is the reference that I talked about above.

    0 讨论(0)
提交回复
热议问题