class A{
int i;
static int j;
void c(){//Body}
static void d(){//Body}
}
如果A a=new A();
1.静态变量是在类加载时才分配内存的,在内存中仅有一份,被所有实例共享,存储在方法区。
2.方法是编译后成为字节码指令,也是存储在方法区中。
3.对象a本身占用的内存空间是从堆中分配的,而堆和方法区是jvm中两个不同的存储空间。
问题1: 那么a对象实际在堆中占用的内存大小仅仅是i变量吗?
2: 如果是这样那是不是意味着对象a和类A占用的内存大小是不同的?
int i;
static int j;
void c(){//Body}
static void d(){//Body}
}
如果A a=new A();
1.静态变量是在类加载时才分配内存的,在内存中仅有一份,被所有实例共享,存储在方法区。
2.方法是编译后成为字节码指令,也是存储在方法区中。
3.对象a本身占用的内存空间是从堆中分配的,而堆和方法区是jvm中两个不同的存储空间。
问题1: 那么a对象实际在堆中占用的内存大小仅仅是i变量吗?
2: 如果是这样那是不是意味着对象a和类A占用的内存大小是不同的?
应该是不同的,因为明显是两个概念,类是模板,对象是实体
不止,至少有一个父类 Object 实例的引用2: 如果是这样那是不是意味着对象a和类A占用的内存大小是不同的
对,不相同