![](/img/trans.png)
[英]Does Java have an internal JSON library that doesn't require adding explicit jar reference?
[英]Does an Internal Object in Java have a Reference?
如果您有类似以下内容:
class MyClass {
private class InnerClass {
}
}
在java中。 是4字节引用的开销的内部类,还是在内存中与父类连续? 为了澄清,另外它是否有4个字节的通用对象开销信息?
一个“普通”java类有8个字节的开销,一个4字节的引用加上4个字节的关于该对象的其他信息,内部类也有8个字节的这个吗?
内部类就像在创建它们时在堆上分配的常规类,并且当时会发生任何内存分配。 内部类需要知道它的父类。
更新根据您在下面的评论 - 所以技术上内部类就像我上面提到的普通类一样,所以当你创建它/使用它时你会占用内存。 此外,如果你的内部类中有静态成员,它将添加一些内存使用,因为内部类将有一个类对象。
这回答了你的问题了吗?
只需使用javap反编译InnerClass
class MyClass$InnerClass extends java.lang.Object{
final MyClass this$0;
MyClass$InnerClass(MyClass);
}
在你的例子中
class MyClass {
private class InnerClass {
}
}
创建MyClass对象不会自动创建InnerClass对象,因此对象不能“始终在外部对象内”。 更重要的是,您可以为每个MyClass对象创建任意数量的InnerClass对象,因此MyClass对象无法为所有这些对象提供足够的空间。
// numbers: MyClass InnerClass
MyClass m = new MyClass(); // 1 0
MyClass.InnerClass i = m.new InnerClass(); // 1 1
MyClass.InnerClass[] array =
new MyClass.InnerClass[20]; // 1 1
for(int i = 0; i < 20; i++) {
array[i] = m.new InnerClass();
} // 1 21
可以在任何其他对象可以使用的任何地方使用MyClass对象,因此它们也需要普通对象所需的所有常规信息。
因此,InnerClass的对象与普通类的对象具有相同的开销,甚至还有一个引用(对于非静态内部类),因为每个内部对象都需要知道它的外部对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.