Java陣列物件佔用多少個位元組?
Java記憶體模型基礎知識
物件記憶體中可以分為三塊區域:
-
物件頭(Header)
-
MarkWord佔用8位元組
-
Class Point佔用4位元組
-
Length 陣列佔用4位元組
-
-
例項資料(Instance Data)
-
對齊填充(Padding)
眾所周知Object object = new Object()佔用了16位元組,然後看一下下面幾個陣列佔用空間大小
int[] intArr = new IntArr[3];
String[] stringArr = new String[3];
byte[] byteArr = new byte[3];
long[] longArr = new long[3];
對於上面幾個陣列來說,Mark Word, Class Point,Length佔用的空間都是一樣的(16),只有例項資料佔用空間不相等,那麼先看一下相同部分空間佔用情況,
Mark Word佔用8個位元組
Class Point 佔用4個位元組
Length 佔用4個位元組
然後分別看一下每個陣列例項資料佔用的空間大小
型別 | 頭部佔用 | 例項資料佔用空間詳情(位元組) | 補齊填充 | 總佔用 |
---|---|---|---|---|
byte | 16 | 3 | 5 | 24 |
int | 16 | 12 | 4 | 32 |
long | 16 | 24 | 0 | 40 |
String | 16 | 12 | 4 | 32 |
對於上面的結果,我對byte,int,long的佔用完全理解,因為例項資料佔用 = 陣列長度 * 型別佔用位元組數,但是對於String型別不甚理解,然後各種百度,最後終於榆木腦袋開了竅,對於String陣列來說,每個元素就是存的一個物件的引用地址,而每個引用地址佔4個位元組,所以例項資料佔用 = 陣列長度 * 引用地址佔用位元組數
在看下面兩個例子:
分別建立兩個物件
物件1
public class Obj1 {
private char[] value;
private int count;
private int offset;
private int hashcode;
}
物件2
public class Obj2 {
String value;
}
Obj1[] arr1 = new Obj1[3];
Obj2[] arr2 = new Obj2[3];
可以預測一下上面兩個物件佔用的空間大小.
實際結果: 兩個物件佔用空間大小是一樣的
相關文章
- JAVA——一個漢字佔用多少位元組?Java
- Object o = new Object()佔多少個位元組?-物件的記憶體佈局Object物件記憶體
- 位元組陣列流陣列
- 【HotSpot】一個java物件佔多少空間HotSpotJava物件
- Java char 型別究竟佔幾個位元組?Java型別
- AES位元組陣列加密解密流程陣列加密解密
- Java中boolean到底佔幾位元組?JavaBoolean
- js陣列操作——物件陣列根據某個相同的欄位分組JS陣列物件
- 寫個方法近似計算指定陣列或物件佔用記憶體的大小陣列物件記憶體
- Oracle中文漢字佔用位元組Oracle
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- GBase 8a中一個字元佔用位元組數說明字元
- python以16進位制列印位元組陣列Python陣列
- 一個Java物件到底佔用多大記憶體?Java物件記憶體
- 按照陣列順序給物件重新組合成新物件陣列物件
- js物件陣列(JSON) 根據某個共同欄位 分組物件陣列JSON
- 陣列物件按物件某個屬性排序陣列物件排序
- Javascript 物件 – 陣列物件JavaScript物件陣列
- 陣列物件根據物件中指定的屬性去重?你知道多少陣列物件
- js合併兩個陣列物件JS陣列物件
- Java陣列的運用Java陣列
- 1.iOS --佔用的位元組的總結iOS
- 浮點數(float)線上轉位元組陣列的工具陣列
- 位元組陣列轉浮點數線上轉換器陣列
- 物件陣列排序物件陣列排序
- lodash.groupBy 處理陣列物件按需分組陣列物件
- 建立包含N個空物件的陣列物件陣列
- 證明arguments是個物件不是陣列物件陣列
- 寫個方法判斷陣列物件中是否存在某個物件陣列物件
- 物件陣列 根據key 把一樣的push到一個陣列物件陣列
- float浮點數線上轉位元組陣列轉換工具陣列
- 位運算實現整數與位元組陣列轉換陣列
- C#位元組陣列byte[]和字串string如何互相轉換C#陣列字串
- Solidity語言學習筆記————13、固定大小位元組陣列Solid筆記陣列
- Solidity語言學習筆記————14、動態位元組陣列Solid筆記陣列
- Java 位元組碼Java
- C語言列舉型別所佔位元組大小例項解析C語言型別
- java day6 java陣列2與物件導向1Java陣列物件