加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:17:58 所属栏目:安全 来源:网络整理
导读:Scala类库中使用的标准模式是类和特征中的类的定义.父类对象的大多数操作都会导致创建这些内部类的对象.每个对象的每个内部类都不同. 例如 请参阅scala.io.Source和LineIterator的源代码.我认为这是标准库中最简单的一个. 正如文件所示,下面是两个不同的类.
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不应该是一个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读