Scala类定义对perm gen空间的影响

时间:2011-08-18 19:30:43

标签: scala permgen

Scala类库中使用的标准模式是类和特征中类的定义。父类对象的大多数操作都会导致创建这些内部类的对象。每个对象的每个内部类都不同。

e.g。 请参阅scala.io.Source和LineIterator的源代码。我认为这是标准库中最简单的一个。

正如文件所示,下面是两个不同的类别。

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

表示创建了两个类。

由于整个集合库使用相同的模式,对于长时间运行的进程有什么影响permgen空间?

1 个答案:

答案 0 :(得分:6)

我不确定你是如何得出结论s1 != s2,然后是s1.getLines.getClass != s2.getLines.getClass。如果我使用BufferedSource创建两个Source.fromFile实例,那么当我调用scala.io.BufferedSource$BufferedLineIterator时,两个实例都将返回同一个类getLines的实例。

scala> s1 == s2
res6: Boolean = false

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

Scala确实创建了很多类,但是这是在编译时完成的,而不是运行时的,所以对于长时间运行的进程来说,perm gen不应该是一个问题。