加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java独立变量vs数组性能

发布时间:2020-12-15 03:08:20 所属栏目:Java 来源:网络整理
导读:我正在玩 Java并且想知道以下在性能方面有多么不同.我知道过早优化是编程的困境,但我的好奇只是为了将来的参考. public class Type1{ int[] data = new data[4]; public int getData( int index ){ return data[index]; }}public class Type2{ int data1; in
我正在玩 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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读