难道Java中的内部对象有一个参考?

如果你有类似以下内容:

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对象具有相同的开销为正常类的对象,甚至另外一个参考以上(非静态内部类),因为每个内部对象需要知道它的外部对象。

分类:java的 时间:2015-03-15 人气:0
本文关键词: Java中,内存,引用,JVM
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.864 (s). 10 q(s)