java中簡單內存計算


今天面試遇到一個問題,假設一個類中只聲明一個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個字節


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM