java基本數據類型,及JVM內存對齊

JVM在創建對象的時候,會有一個內存對齊的概念;如

1、 一個空對象佔用8字節( 空對象:佔8字節 64位bit )
2、 只有一個 boolean 字段的類實例佔 16 字節:頭信息佔 8 字節,boolean 佔 1 字節,爲了對齊達到 8 的倍數會額外佔用 7 個字節
3、 包含 8 個 boolean 字段的實例也會佔用 16 字節:頭信息佔用 8 字節,boolean 佔用 8 字節;因爲已經是 8 的倍數,不需要補充額外的數據來對齊
4、 一個包 2個 long 字段、3個 int字段、1 個 boolean 字段的對象將佔用:
頭信息佔 8 字節;
2 個 long 字段佔 16 字節(每個 long 字段佔用 8 字節);
3 個 int 字段佔 12 字節(每個 int 字段佔用 4 字節);
1 個 boolean 字段佔 1 個字節;
上面加起來是 37 字節,
爲了對齊額外多的 3 個字節,需求對齊 ,爲8 的倍數 40

 

java中8種基本數據類型爲例

1.java中8種基本數據類型有哪些: 

布爾 boolean ,

整型 byte , char , short ,int, long,  

浮點類型float , double

----------------------------------------------------------------------------------------------------------------

2.佔位是多少呢

【int】

int    4字節byte 32 bit  

int  默認值爲0

Integer 默認null  

Integer.MAX_VALUE;  //2的31次方-1

Integer.MIN_VALUE;  //負的2的31次方

【boolean】
 

boolean 默認false

boolean 佔8分之1字節 1位bit

【char 】

char 1個字節 8 bit

【short】

short 2字節  16 bit 

【float 】

float  4字節byte  32位bit;
 

float  默認0f

Float.MAX_VALUE;   //2的128次方-1

Float.MIN_VALUE;   //2的-149次方

【long】

long  8字節byte  64位bit;

long  默認0l(L小寫)

Long.MAX_VALUE;   //2的64次方-1

Long.MIN_VALUE;   //負的2的64次方

【double 】

double  佔8字節byte  64位bit;

Double.MAX_VALUE;   //2的1024次方-1

Double.MIN_VALUE;    //2的-1074次方

JVM內存對齊:

比如 :boolean會佔用一比特或者佔用一個字節的第八位,但是HotSpot虛擬機會爲每個Boolean字段分配一個字節的空間

 

 

注意:

32位64位操作系統基本數據類型字節大小,只要注意long:

32位: long: 4個字節 

64位: long: 8個字節

 

關於二維數組佔用字節數計算:注意數組有一個不同的地方在於,它本身會有一個記錄數組長度的int類型,佔用4字節,本身又是一個對象,會佔用8字節

----------------------------------------------------------------------------------------------------------------

3.  那64位和32位操作系統在讀取上有什麼區別呢:

首先  64bit CPU擁有更大的尋址能力,最大支持到16GB內存,而32bit只支持4G內存

其次 64位 CPU一次可提取64位數據,32位的CPU一次只能提取32位數據, 所以64位比32位提高了一倍,理論上性能會提升1倍。但這是建立在64bit操作系統,64bit軟件的基礎上的

----------------------------------------------------------------------------------------------------------------

4.需要注意些什麼

在 Java 虛擬機中沒有任何供 boolean 值專用的字節碼指令,在 Java 語言之中涉及到 boolean 類型值的運算,

在編譯之後都使用 Java 虛擬機中的 int 數據類型來代替。 

Java 虛擬機直接支持 boolean 類型的數組,虛擬機的 newarray 指令可以創建這種數組。

boolean 的數組類型的訪問與修改共用 byte 類型數組的 baload 和 bastore 指令。

綜上所述, 單個boolean型是佔4字節(因爲變異後會用int來代替), 而boolean數組中的則佔1字節(因爲用byte來代替的)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章