我想知道在內存中爲對象分配的真實空間。對象,數組和基元類型的Java和精確引用大小
我試圖用例子來解釋:使用64位JVM,指針大小應該是8個字節,所以:
Object singletest = new Object();
將採取8個字節,以引用對象加在對象的大小Object arraytest = new Object[10];
將8字節來引用,其中陣列存儲位置加8 * 10個字節來存儲陣列加上每個對象的大小int singleint = new int;
將採取僅有2個字節,因爲int是原始類型int[] arrayint = new int[10];
將採取8個字節,以引用位置和10 * 2個字節用於元件
此外,這是爲什麼Java允許寫這樣的代碼的原因:
int[][] doublearray = new int[2][];
int[0][] = new int[5];
int[1][] = new int[10];
真正發生的事情是,數組會像對象一樣產生一個引用(aka指針),所以它在聲明時並不關心第二維的大小(並且維度可以不同,它們之間沒有鏈接) 。然後將佔用的空間爲:參考doublearray(8字節),第一維僅僅是對第二維的引用,所以其他8個字節* 2(第一維大小),最後2個字節* 5加2個字節* 10.
所以,最後,如果有一個真正的階級是這樣的:
class Test {
int a, b;
int getA() {return A};
void setA(int a) {this.a = a;}
int getB() {return B};
void setB(int b) {this.b = b;}
}
當我調用一個新的實例,一個指針(或命名爲參考,因爲它的Java)的8個字節會使用加2 + 2字節將整數存儲到類中。
問題是:我是對的還是我寫了廢話?此外,當我沒有實例化一個對象,但我只是聲明它,8個字節將被分配給進一步使用或不?而如果我分配一個空值?
同時對於原始類型我很確定只是聲明它將分配所需的空間(如果我聲明一個「int i」,那麼我可以立即調用i ++,因爲沒有引用被使用,只設置了一部分內存在「0」)。
我在互聯網上搜索沒有聰明的迴應...我知道我寫了很多問題,但任何幫助將不勝感激! (也許我不是唯一一個有興趣)
可能的重複[是否有一個簡單的方法來獲取java對象的大小?](http://stackoverflow.com/questions/8775865/is-there-a-simple-way-to-get -Java-object大小) –