Cod*_*ith 9 java memory arrays class
我必须在我的Java程序中存储数百万个X/Y双对以供参考.我想保持尽可能低的内存消耗以及对象引用的数量.所以经过一番思考后,我决定将这两个点放在一个小的双数组中可能是一个好主意,它的设置如下:
double[] node = new double[2];
node[0] = x;
node[1] = y;
Run Code Online (Sandbox Code Playgroud)
我认为使用数组会阻止类与我在类中使用的X和Y变量之间的链接,如下所示:
class Node {
public double x, y;
}
Run Code Online (Sandbox Code Playgroud)
然而,在阅读了类中公共字段的存储方式后,我突然意识到字段实际上可能不是像指针一样构造结构,也许JVM只是将这些值存储在连续的内存中并且知道如何在没有地址的情况下找到它们使我的点的类表示小于数组.
所以问题是,内存占用量更小?为什么?
我对类字段是否使用指针特别感兴趣,因此具有32位开销.
后者占地面积较小.
原始类型以内联方式存储在包含类中.因此,您Node
需要一个对象标头和两个64位插槽.您指定的数组使用一个数组头(> =一个对象头),最多使用两个64位槽.
如果您要以这种方式分配100个变量,那么它并不重要,因为它只是不同的标题大小.
警告:所有这些都有些推测,因为你没有指定JVM - 其中一些细节可能因JVM而异.