jvm简单笔记(1)

一、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。  

相关文章
相关标签/搜索