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