Scala相比Java表现如何?

28 浏览
0 Comments

Scala相比Java表现如何?

这个问题其实已经回答了一切。这个问题背后的原因是我即将开始一个小的副业项目,并且想要用Scala来完成。过去一个月我一直在学习Scala,现在已经可以很舒服地使用它了。Scala的编译器本身相当慢(除非你使用fsc)。那么它在JVM上表现如何呢?之前我用过Groovy,有时候它的性能比Java好。我的问题是,与Java相比,Scala在JVM上的表现如何?我知道Scala有一些非常好的特性(函数式编程、动态语言、静态类型等等),但归根结底我们还是需要性能...

0
0 Comments

我同意Rex在这篇文章中的评论,并且我个人的经验也支持这一点。我将一个Processing小程序从Java转换成Scala,而没有改变任何实现细节,两个小程序都在大约6毫秒内渲染一个帧,变化很小。
Scala是一种在JVM上运行的编程语言,与Java有着密切的关系。许多开发人员对于Scala相对于Java的性能表现有一些疑虑。为了解决这个问题,下面将介绍Scala相对于Java的性能以及解决方法。
从上述评论中可以看出,对于Java和Scala的性能没有明显的差异。这意味着Scala在处理一些常见任务时可以与Java媲美,甚至可能更好。然而,这只是一个案例,不能代表所有情况。为了更全面地了解Scala相对于Java的性能,我们需要进行更多的测试和比较。
为了解决这个问题,我们可以设计一些实验来比较Scala和Java在不同方面的性能表现。我们可以选择一些常见的编程任务,例如排序、搜索和迭代,然后分别使用Scala和Java实现相同的算法,并比较它们的性能。我们可以测量它们的执行时间、内存使用情况和CPU利用率等指标。通过这些实验,我们可以更准确地评估Scala在不同情况下的性能。
下面是一个示例,展示了如何使用Scala和Java分别实现排序算法,并比较它们的性能:

def bubbleSort(arr: Array[Int]): Array[Int] = {
val n = arr.length
for (i <- 0 until n) { for (j <- 0 until (n - i - 1)) { if (arr(j) > arr(j + 1)) {
val temp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = temp
}
}
}
arr
}
val arr = Array(64, 34, 25, 12, 22, 11, 90)
val sortedArr = bubbleSort(arr)
println(sortedArr.mkString(", "))
[/apcode]

public class BubbleSort {
  public static void bubbleSort(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < (n - i - 1); j++) {
        if (arr[j] > arr[j + 1]) {
          int temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
    }
  }
  public static void main(String[] args) {
    int[] arr = {64, 34, 25, 12, 22, 11, 90};
    bubbleSort(arr);
    for (int num : arr) {
      System.out.print(num + " ");
    }
  }
}

通过比较这两个实现,我们可以评估Scala和Java在排序算法方面的性能。当然,我们还可以进行更多的实验,比较它们在其他方面的性能,以获得更全面的结果。

总之,Scala和Java在性能方面可能会有一些差异,但这需要根据具体情况进行评估。通过设计实验并进行比较,我们可以更准确地了解Scala相对于Java的性能。这有助于开发人员选择合适的语言来满足他们的需求。

0
0 Comments

Scala相对于Java的性能如何?这个问题的出现的原因是人们对Scala和Java之间的性能差异感兴趣。解决方法是通过比较Scala和Java的特性和使用情况来评估它们的性能差异。

Scala的编译器将代码编译成字节码,并且是静态类型的,因此可以进行与Java等静态类型语言相同的优化。因此,将Groovy与Scala进行比较是不合适的。

对于Java和Scala的比较,可以预期它们在大多数情况下性能相当。如果编写Scala程序时愚蠢地使用了大量的混入(通过特征实现的),可能会导致一些额外的开销,而在纯Java中不会有这种情况。

然而...

如果混入实际上是以良好的方式解决复杂问题的,那么在纯Java中解决相同复杂性问题的解决方案将需要更多的工作。无法说你使用自己的模式在Java中编写的解决方案比在Scala中获得的解决方案更高效(请记住,Scala编译器的编写者可能是比你更好的程序员)。

另一方面,如果你无故地使用语言特性(例如,使用Integer对象而不是普通的int原始类型),无论使用哪种语言,你的代码都会变得臃肿、慢、糟糕。

此外,考虑一类特殊的基于请求-响应的应用程序,这些应用程序与数据库或其他I/O密集型资源进行交互。瓶颈不会是'new'操作符或虚拟方法调用开销,而几乎肯定是I/O操作。

总结一下,Scala和Java之间的性能基本相同,在99%的情况下,性能不应该是你选择一种语言而不是另一种语言的最重要原因。由于熟练的人力劳动比计算机硬件更昂贵,你最好选择你能够(或者能够学会)在其中最高效地编程的语言(包括你的团队成员)。如果Scala让你编写的代码是Java的十分之一,使用它可能会获得10倍的效益。如果Scala使你的速度减慢了10倍(因为它太难阅读),那就坚持使用Java!

这在理论上都是正确的。但在实践中,如果你对事物进行测量而不仅仅是期望,Scala代码往往比Java代码慢得多,就像Java代码往往比C++代码慢一样。"不要担心速度,用硬件来解决慢速代码"的论点每天都不再那么正确。在客户端,净书和手机都不快。在服务器端,减少能源使用的压力越来越大。我们不会回到手动调优的汇编语言,但值得仔细思考Scala给你带来了什么。

实际上,我还没有遇到过将任何程序从Scala转换为Java后能够获得任何可测量的加速的情况。

:你有任何实际的数据支持你的观点吗?虽然我可以同意你在Java / C ++之间的比较,但我不明白这如何适用于Scala vs. Java。这就像争论GCC创建的二进制代码比较慢,因为你在C++中使用了解析器A而不是解析器B一样。

0
0 Comments

Scala与Java的性能相比如何?这个问题的出现是因为人们对Scala的性能表现存在疑问,并希望找到比较两者性能的方法。为了解决这个问题,可以通过以下方法来进行比较:

1.查看计算机语言基准测试网站上的数据,比如Computer Languages Benchmark Game。这个网站上提供了Scala和Java之间的性能对比数据,可以用于说明Scala在性能上几乎和Java一样好。

2.可以参考Tim Bray的Wide Finder 2,这个比较适合用于高吞吐量多核编程的比较。不过这个比较的结果可能不太有用,因为算法没有提前定义好,所以差异的很大部分归结为算法的差异。

3.对于对象创建,现代Java JVM的对象创建几乎是免费的,这只是“恐慌散布”。Scala相对于原生Java的性能较慢,是因为Scala具有大量与Scala特定语言特性相关的间接性。在同一个JVM上,与Java相比,Scala可能会有高达5倍的速度惩罚。

4.对于内部循环中只进行一些数学运算的情况,对象创建是非常昂贵的。如果在内部循环中只进行匹配操作,Scala会使用原生的'int'、'float'等类型,与原生Java相比几乎没有差别。

5.对象的分配是廉价的,但对象的初始化可能是任意昂贵的;即使是浅复制构造函数,如果创建足够多的对象,也可能需要相当长的时间。在函数式代码中,由于使用不可变对象而不是可变状态,经常会调用这种类型的复制构造函数,因此对象初始化可能是昂贵的。

6.创建对象的成本可能是廉价的,但创建对象会增加垃圾回收的负担。这就是为什么Java或Scala可能会被认为“慢”的原因。

7.此外,还应考虑内存带宽成本。是的,指针分配是廉价的,但该对象不在缓存中(如果要在该对象中进行写入,则必须完全获取主存)。

总之,Scala在性能方面与Java基本相当,但在某些特定情况下可能会稍慢。因此,在选择编程语言时,需要根据具体应用场景和需求来进行权衡和选择。

0