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
- java 位元組陣列取反Java陣列
- Java基本型別佔用的位元組數(char佔用幾個位元組問題)Java型別
- JAVA中求解物件所佔位元組大小Java物件
- Object o = new Object()佔多少個位元組?-物件的記憶體佈局Object物件記憶體
- 位元組陣列流陣列
- 【HotSpot】一個java物件佔多少空間HotSpotJava物件
- Java char 型別究竟佔幾個位元組?Java型別
- java中基本型別佔用位元組數Java型別
- AES位元組陣列加密解密流程陣列加密解密
- 關於位元組陣列QByteArray陣列
- .NET刪除位元組陣列中的0位元組陣列
- Java中boolean到底佔幾位元組?JavaBoolean
- Oracle中文漢字佔用位元組Oracle
- 用JavaScript計算字串佔用位元組數JavaScript字串
- js陣列操作——物件陣列根據某個相同的欄位分組JS陣列物件
- C#位元組陣列與字串轉換C#陣列字串
- C/C++—— C++中一個空物件為什麼還要佔用一個位元組空間C++物件
- 如何計算Java物件佔用了多少空間?Java物件
- GBase 8a中一個字元佔用位元組數說明字元
- 獲得字串實際長度,漢字佔用2個位元組。字串
- python以16進位制列印位元組陣列Python陣列
- byte位元組陣列 轉換成double型別陣列型別
- Javascript使用Buffer替代位元組陣列會提升效能JavaScript陣列
- 浮點數(float)線上轉位元組陣列的工具陣列
- 位元組陣列轉浮點數線上轉換器陣列
- 按照陣列順序給物件重新組合成新物件陣列物件
- 1.iOS --佔用的位元組的總結iOS
- 一個Java物件到底佔用多大記憶體?Java物件記憶體
- MySQL索引到底支援多少位元組?MySql索引
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- C#結構體和位元組陣列的轉換C#結構體陣列
- float浮點數線上轉位元組陣列轉換工具陣列
- js物件陣列(JSON) 根據某個共同欄位 分組物件陣列JSON
- ORACLE 資料型別佔用的位元組數(轉)Oracle資料型別
- 陣列物件按物件某個屬性排序陣列物件排序
- PHP陣列到底佔用多少記憶體空間PHP陣列記憶體
- 陣列物件根據物件中指定的屬性去重?你知道多少陣列物件