我必須在我的Java程序中存儲數百萬個X/Y雙精度對以供參考。我想盡可能降低內存消耗以及對象引用的數量。所以經過一番思考,我決定在一個很小的雙列保持兩個點可能是一個好主意,它的設置看起來像這樣:Java類與數組內存大小?
double[] node = new double[2];
node[0] = x;
node[1] = y;
我想用數組將防止類和我的X和之間的聯繫在課堂上使用Ÿ變量,如下所示:
class Node {
public double x, y;
}
但是在類的公共字段存儲讀入的方式後,我恍然大悟,表格中實際上可能沒有構造爲狀結構的指針,也許是JVM是隻需將這些值存儲在連續的內存中,並知道如何在沒有地址的情況下找到它們,從而使我的點的類表示比陣列小。
所以問題是,它有一個較小的內存佔用?爲什麼?
我特別感興趣的是類字段是否使用指針,因此有32位開銷,或者不是。
目前在Mac OS X上在x64上運行Java 1.7 SE。現在我假設一個巨大的2D數組將完全消除每個節點的必要對象引用,因此這將是迄今爲止最保守的內存方式? –
如果使用2D,則表示double [2] [n]或double [n] [2],這也會導致對象引用。因爲在這種情況下,java中的數組真的是數組的陣列 –
(您可能會過度優化此操作,但是......)最小內存佔用量將是一個一維數組,您可以在其中明確計算索引。 Java中的2D數組只是指向1D數組的指針數組。 –