微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

例如
请参阅scala.io.source和LineIterator的源代码.我认为这是标准库中最简单的一个.

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

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

意味着创建了两个类.

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

解决方法

我不确定你如何得出如果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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐