今天面試遇到一個問題,假設一個類中只聲明一個int類型,那么這個對象多大,這里先寫出解決方案,首先引入內存計算工具lucene-core,
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>4.0.0</version>
</dependency>
然后編寫類
public class O {
int a=0;
}
編寫測試類
public static void main(String[] args) {
// 計算對象在堆中所占大小
// RamUsageEstimator.shallowSizeOf(Object obj)
// 返回對象綜合所占大小,單位字節
long result = RamUsageEstimator.sizeOf(new O());
System.out.println(result);
// 輸出16
}
java中數據類型分為基本數據類型和引用數據類型,其中java基本數據類型分為整數型,浮點數,字符,布爾,一共四型八類,具體所占字節大小如下
byte 1個字節
short 2個字節
char 2個字節
int 4個字節
long 8個字節
float 4個字節
double 8個字節
ref 對象引用 4個字節
java中空對象的話所占8個字節,也就是說如果一個對象中只聲明一個int類型的值,內存大小為 8(空對象) + 4(int) + 4(對象引用) = 16字節
如果再加上一個byte變量
public class O {
int i;
byte j;
}
則輸出24字節,
因為在JVM中對象大小必須是8字節的整倍數,如果沒有達到的話會通過對齊補充自動補全,再加上一個byte類型大小為17字節,但是不是8的倍數,所以會補充到24個字節