2011-08-18 43 views
5

Scala類庫中使用的標準模式是類和特徵中類的定義。父類的對象的大部分操作都會導致創建這些內部類的對象。每個內部類對於每個對象都是不同的。Scala類定義對perm gen空間的影響

例如 查看scala.io.Source和LineIterator的源代碼。我認爲這是標準庫中最簡單的一個。

由於文件建議下面是兩個不同的類。

val s1:Source = ... 
val s2:Source = ... 
s1.getLines.getClass != s2.getLines.getClass //true if s1 != s2 

意味着創建了兩個類。

由於整個集合庫使用相同的模式,因此長時間運行的進程對permgen空間有什麼影響?

回答

6

我不知道你如何得出結論,如果s1 != s2,然後s1.getLines.getClass != s2.getLines.getClass。如果我使用Source.fromFile創建了兩個BufferedSource實例,則當我撥打getLines時,兩者都會返回同一類scala.io.BufferedSource$BufferedLineIterator的實例。

scala> s1 == s2 
res6: Boolean = false 

scala> s1.getLines.getClass == s2.getLines.getClass 
res7: Boolean = true 

這是真的,斯卡拉創造了很多類,但是這是在編譯時完成的,不是運行,所以對於長時間運行的過程燙髮根不應該更多的是問題。