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。  

相關文章
相關標籤/搜索