Java独立变量vs数组性能
发布时间:2020-05-25 16:28:53 所属栏目:Java 来源:互联网
导读:我正在玩 Java并且想知道以下在性能方面有多么不同.我知道过早优化是编程的困境,但我的好奇只是为了将来的参考. public class Type1{ int[] data = new data[4]; public int getData( int index ){ return data[index]; }}public class T
|
我正在玩 Java并且想知道以下在性能方面有多么不同.我知道过早优化是编程的困境,但我的好奇只是为了将来的参考. public class Type1{
int[] data = new data[4];
public int getData( int index ){
return data[index];
}
}
public class Type2{
int data1;
int data2;
int data3;
int data4;
public int getData1(){
return data1;
}
public int getData2(){
return data2;
}
public int getData3(){
return data3;
}
public int getData4(){
return data4;
}
}
可以理解的是,有许多因素可能会有所不同,但必须以某种方式表现出一些明显的表现.显然类Type1在设计方面是一个更有吸引力的解决方案,但它似乎在检索数据时有一个额外的步骤,即进入一个数组以获得一个int,而不是Type2直接为数据.如果它们持有Class对象数组,则差异可能更明显,因为它可能会保证Java使用数组成员的引用.我完全没球了吗? 解决方法与API使用差异的影响相比,两种方法之间的运行时速度差异肯定是微不足道的.但是,如果我们重新安排事情以使两者的API相同,那么我们发现运行时速度差异确实可以忽略不计.以下代码时间均为两种方法,两者均为~13秒.您的结果可能不同. 可能值得查看字节码,看看编译器是否已经优化了大部分差异. public class Program {
public static interface Type {
int getData1();
int getData2();
int getData3();
int getData4();
}
public static class Type1 implements Type {
private int[] data;
public Type1(int data1,int data2,int data3,int data4) {
data = new int[] { data1,data2,data3,data4 };
}
@Override
public int getData1() {
return data[0];
}
@Override
public int getData2() {
return data[1];
}
@Override
public int getData3() {
return data[2];
}
@Override
public int getData4() {
return data[3];
}
}
public static class Type2 implements Type {
private int data1;
private int data2;
private int data3;
private int data4;
public Type2(int data1,int data4) {
this.data1 = data1;
this.data2 = data2;
this.data3 = data3;
this.data4 = data4;
}
@Override
public int getData1() {
return data1;
}
@Override
public int getData2() {
return data2;
}
@Override
public int getData3() {
return data3;
}
@Override
public int getData4() {
return data4;
}
}
public static void main(String[] args) {
timeType(new Type1(1,2,3,4));
timeType(new Type2(1,4));
}
private static void timeType(Type type) {
long start = System.currentTimeMillis();
int total = 0;
for (long i = 0; i < 10000000000l; i++) {
total += type.getData1();
total += type.getData2();
total += type.getData3();
total += type.getData4();
}
System.out.println(total);
System.out.println(System.currentTimeMillis() - start);
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
