我知道scala支持不变性,所以当我们有两个整数val并且我们做val1 + val2时,所以它会创建一个新的整数,其值为val1 + val2。Scala的内存分析
我的问题是,因为scala创建对象的新实例,以不改变以前的对象,不变性的性能和内存缺陷是什么?
编辑:我想要详细说明scala有关它如何处理性能和内存开销的细节。
我知道scala支持不变性,所以当我们有两个整数val并且我们做val1 + val2时,所以它会创建一个新的整数,其值为val1 + val2。Scala的内存分析
我的问题是,因为scala创建对象的新实例,以不改变以前的对象,不变性的性能和内存缺陷是什么?
编辑:我想要详细说明scala有关它如何处理性能和内存开销的细节。
Scala代码被编译为JVM字节码,所以基本上内存管理与Java相比并没有什么不同。 Chapter 6 of Programming in Scala, First Edition提到了使用不可变内存的潜在折衷。可能你可能会创建很多对象实例,但是Scala库通常会创建短暂的对象,所以垃圾收集器应该快速处理它们。
Scala有多种实现。其中两个是可用于生产的:Java平台上的Scala-JVM和ECMAScript平台上的Scala.js。 Scala本地正在开发中,Scala.NET被放弃。您将Scala编程语言与几种Scala编译器之一混淆在一起。 –
我明白了。这个问题从来没有提到任何具体的Scala实现,所以我只关于我相信最受欢迎的JVM。 –
@Michal,我认为你的答案从JVM的角度来看很有帮助。感谢你的回答。 –
请注意,如果需要,可以使用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
[可不可改变是一个记忆猪?](http://stackoverflow.com/questions/2527412/can-immutable-be-a-memory-hog) –
@Michal,我的可能的复制我有这个问题具体到斯卡拉。 scala内部支持不变性的性能和内存增强有哪些? –