Class Abc {
Integer a;
Integer b;
Integer c;
getters();
setters();
}
分配給對象(POJO)當我創建對象Abc abc = new Abc()
即12字節(4字節爲整數)是否被存儲或分配時我設置一些值的變量等setA(10).
?什麼時候存儲器獲取的Java
Class Abc {
Integer a;
Integer b;
Integer c;
getters();
setters();
}
分配給對象(POJO)當我創建對象Abc abc = new Abc()
即12字節(4字節爲整數)是否被存儲或分配時我設置一些值的變量等setA(10).
?什麼時候存儲器獲取的Java
當我創建對象Abc abc = new Abc(),即12字節(整型爲4字節)時,是否分配內存。
是的。更具體地說,它在調用Abc
類的構造函數鏈之前立即被分配。
但是,分配的空間還包含一些頭信息,您的示例中的金額取決於JVM是使用32位還是64位地址進行引用。 (Integer
類型是一個引用類型!)
(假設32位引用,大小可能是3 x 4字節+ 8字節頭+ 4字節填充;即24字節,但這是JVM實現特定的。)
或者當我設置一些值像setA(10)的變量。
這將取決於setA
方法的簽名以及實施方式。問題在於是否存在int
- >Integer
的自動裝箱以及發生何種情況/何時發生。
但是在所有情況下,(可能)分配的Integer
對象不是Abc
對象的一部分。 Abc
對象具有用於保存對象Integer
的引用的字段,這些字段的空間是對象Abc
的一部分...這意味着它在分配對象時分配,而不是在設置字段時分配。
有多少內存分配給'Map
您可以隨時查看源代碼並自行解決。 –
假設你的意思是堆內存而不是堆棧:對於這個類,當你調用'new'時(Java引用是衆所周知的,通常需要8個字節,並且你有三個字節),然後得到3x8 = 24字節,然後當您創建每個「Integer」時,至少需要另外4個字節。另外,當類文件被加載時(不知道有多少字節,請查看類文件),「Class」本身就有一次分配。 – markspace
對象初始化時分配內存(即'new Object()')。然而,一個'int'每個需要4個字節,而且你正在使用'Integer'包裝(盒裝)類,這將需要更多的內存。 –
當你調用'new'時分配內存。 –