2016-11-20 35 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