【发布时间】:2016-01-05 09:55:25
【问题描述】:
出于兴趣:最近,我在我的一个 Java 项目中遇到了一种情况,我可以将一些数据存储在二维数组中,或者为其创建一个专用类,我会将其实例放入一维数组中.所以我想知道在性能(运行时、内存消耗)方面是否存在一些关于这个主题的规范设计建议?
不考虑设计模式(极其简化的情况),假设我可以像这样存储数据
class MyContainer {
public double a;
public double b;
...
}
然后
MyContainer[] myArray = new MyContainer[10000];
for(int i = myArray.length; (--i) >= 0;) {
myArray[i] = new MyContainer();
}
...
对
double[][] myData = new double[10000][2];
...
我以某种方式认为基于数组的方法应该更紧凑(内存)和更快(访问)。再说一次,也许不是,数组也是对象,数组访问需要检查索引,而对象成员访问不需要。(?)对象数组的分配可能(?)需要更长的时间,因为我需要迭代地创建由于额外的类,实例和我的代码会更大。
因此,我想知道常见 JVM 的设计是否在访问速度和内存消耗方面为一种方法提供了优于另一种方法的优势?
非常感谢。
【问题讨论】:
-
澄清一下,Java 数组是
Object(s)。甚至是基元数组。 -
@ElliotFrisch:是的,我知道这一点(参见...数组也是对象...)。仍然:可能是 JVM/JIT 以一种特殊的方式处理数组,这可以使它们以一种或另一种方式更快地访问。还可能有缓存/内存布局等...因此我还询问了...常见JVM的设计....
-
您可能会看看是否可以使用
enum。这些被特殊对待,因为它们是编译时构造。
标签: java arrays performance class memory-consumption