2016-11-20 31 views
0

我知道scala支持不变性,所以当我们有两个整数val并且我们做val1 + val2时,所以它会创建一个新的整数,其值为val1 + val2。Scala的内存分析

我的问题是,因为scala创建对象的新实例,以不改变以前的对象,不变性的性能和内存缺陷是什么?

编辑:我想要详细说明scala有关它如何处理性能和内存开销的细节。

+0

[可不可改变是一个记忆猪?](http://stackoverflow.com/questions/2527412/can-immutable-be-a-memory-hog) –

+0

@Michal,我的可能的复制我有这个问题具体到斯卡拉。 scala内部支持不变性的性能和内存增强有哪些? –

回答

2

Scala代码被编译为JVM字节码,所以基本上内存管理与Java相比并没有什么不同。 Chapter 6 of Programming in Scala, First Edition提到了使用不可变内存的潜在折衷。可能你可能会创建很多对象实例,但是Scala库通常会创建短暂的对象,所以垃圾收集器应该快速处理它们。

+0

Scala有多种实现。其中两个是可用于生产的:Java平台上的Scala-JVM和ECMAScript平台上的Scala.js。 Scala本地正在开发中,Scala.NET被放弃。您将Scala编程语言与几种Scala编译器之一混淆在一起。 –

+1

我明白了。这个问题从来没有提到任何具体的Scala实现,所以我只关于我相信最受欢迎的JVM。 –

+0

@Michal,我认为你的答案从JVM的角度来看很有帮助。感谢你的回答。 –

0

请注意,如果需要,可以使用var -s和可变结构,它们可以很好地变异。例子:

var i = 1 
i += 1 
val l = mutable.Map(1 -> 5) 
l += (2 -> 4) // this one was writte from memory, may need a correction