一、jvm分栈和堆,即stack和heap,栈上面是用来存放基本数据类型的,堆上面是用来存放对象类型的。java
二、基本类型的大小是固定的,对象类型的大小是不固定的,栈的模型能够理解为一个往上存放东西的桶,堆的模型能够理解为多个桶并排放在一块儿组成的存储块。数组
三、值类型和引用类型,值类型有基本的八种,byte short int long,fload double,char,boolean。栈上存放的其实除了这八种,还有一个就是引用类型的地址returnAddress。是int类型占四个字节。jvm
四、程序是运行在栈上面的,因此方法参数的传递其实都是值传递,只不过在传对象时是传的对象的地址值。对象
五、引用类型有类类型、接口类型、数组。接口
六、对象的大小怎么算呢? 在java中,一个Object对象的大小是8byte,就是8个字节,他是在这个对象没有任何一个属性的状况下的大小。如Object obj = new Object();执行完这个就完成了一个对象生命的创建,可是他占用的空间是4byte+8byte,8byte就是他自己在堆上面做为一个空对象占用的大小,而4byte是他在栈上面的引用的大小,其实引用就是一个地址,应该是用int表示,一个int就是占4个byte。内存
那好比:数据类型
Class MyObject{引用
int count;程序
boolean flag;方法
Object obj;
}
这个类型来的引用占多大空间呢?
计算:空对象大小8byte+int大小4byte+Boolean大小1byte+空Object引用的大小4byte=17byte。
可是,java在给对象内存分配时都是以8的倍数进行分配,所以大于17byte最接近的是24byte,所以它的实际大小是24byte。