2011-08-18 44 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 

这是真的,斯卡拉创造了很多类,但是这是在编译时完成的,不是运行,所以对于长时间运行的过程烫发根不应该更多的是问题。