为什么要在Scala或Java中使用盒装类型而不是Java或C中的原始类型呢?

时间:2013-03-03 10:41:53

标签: java c performance scala

我刚刚对Scala,Java和C进行了比较。以下是我运行的代码和我得到的结果:

Java(原始数据类型):

    class test {
        public static void main(String args[]) {
            long t1=System.nanoTime();
            for (int i=0; i<1000000000; i++) {

            }
            long t2 = System.nanoTime();

            System.out.println((t2-t1));
        }
    }
输出:1181601584
这是1.2秒



C:

    #include <stdio.h>
    #include <time.h>

    int main() {
      clock_t t1=clock();
      for (int i=0; i<1000000000; i++) {

      }
      clock_t t2= clock();

      printf("%u",(t2-t1)/(double)CLOCKS_PER_SEC);

      return 0;
    }
输出:2233382994
这是2.2秒



的Scala:

    object test {
      def main(args: Array[String]) {
        val nos = 1 to 1000000000
        val t1 = System.nanoTime
        for (i<-nos) {

        }
        val t2 = System.nanoTime

        println(t2-t1)
      }
    }
输出:12392282270
这是12.4秒



Java(盒装):

    class test {
        public static void main(String args[]) {
            Long t1=System.nanoTime();
            for (Integer i=0; i<1000000000; i++) {

            }
            Long t2 = System.nanoTime();

            System.out.println((t2-t1));
        }
    }
输出:20756681957
这是20.8秒

现在,我的问题是,如果原始的东西比装箱的反零件更快,我们为什么要选择使用面向对象的语言?我同意以面向对象的方式编写大型项目要容易得多,但如果效率和速度是我们所寻求的(就像在服务器和超级计算机中一样,而且我认为更快的软件对于家庭用户来说更好) ,为什么世界上的任何人都试图在Scala中编写他的代码?更深层次的问题甚至是为什么这些慢速语言出现了?

3 个答案:

答案 0 :(得分:5)

选择语言的主要因素并非总是(甚至极少)表现。你会在这两者中选择哪一个:

  1. 语言A允许在30天内创建程序。每个用户交互的响应时间是2毫秒
  2. 语言B允许在2天内创建相同的程序。但每个用户交互的响应时间是20毫秒。
  3. 您是否真的认为最终用户关心响应时间是2还是20毫秒?那些时间太短,以至于无法区分。但是,与2天的开发相比,30天的开发是巨大的。每天1000美元,这是非常不同的。

    此外,您的基准存在缺陷。

    此外,您不使用OOP来使用Integer而不是int。您可以使用OOP以更直观的方式操作由多个字段和方法组成的复杂对象。

答案 1 :(得分:1)

几乎没有实用的基准。有可能你的C和Java编译器立即优化了空循环,而在Scala中它并不那么容易,因为循环的Scala版本涉及方法调用,必须首先检查效果。

答案 2 :(得分:1)

因为有时候,大多数时候,紧密循环的速度通常是你问题中最少的。