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

scala – 在计算延迟值后垃圾收集对象

发布时间:2020-12-16 18:31:14 所属栏目:安全 来源:网络整理
导读:在我目前的项目中,我正在处理大量数据,并且数据处理应该是内存效率和计算性能. 每个项目都有一些可以非常快速地读取的元数据,并且几乎总是很有趣.除此之外,每个项目都具有相对较少读取的实际数据,但阅读尤其是解析非常耗时.因此,它自然接缝,只有在实际请求的
在我目前的项目中,我正在处理大量数据,并且数据处理应该是内存效率和计算性能.
每个项目都有一些可以非常快速地读取的元数据,并且几乎总是很有趣.除此之外,每个项目都具有相对较少读取的实际数据,但阅读尤其是解析非常耗时.因此,它自然接缝,只有在实际请求的情况下才能解析数据.

为此我想到了懒惰的价值观:

class Item(metaData: MetaData,dataString: String) {
    lazy val data = parse(dataString)
}

现在,仅在实际请求时才解析数据.问题是,dataString和解析后的数据保存在内存中.据我所知,只要“数据”被调用(或者存在?)就不能再访问“dataString”了,因此它可以被垃圾收集.不幸的是,这种接缝不会发生.

有没有办法以不同的方式解决问题或给垃圾收集器提示垃圾收集dataString在这里?

解决方法

你只需要更多的工具:

class Item(dataString: String) {
  private var storedData = dataString
  lazy val data = {
    val temp = parse(storedData)
    storedData = null
    temp
  }
}

不保留对dataString的额外引用,因为您从不在构造函数之外引用它(设置storedData),并且一旦您使用它,您存储在storedData中的引用就会被清空,因此该字符串可以自由地进行GCed.

(编辑:李大同)

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

    推荐文章
      热点阅读