Scala如何处理重复的案例类?

时间:2019-12-30 23:15:53

标签: scala jvm

我正在尝试优化Scala应用程序的内存消耗,该应用程序具有大树结构,该结构存储可能有重复项的节点(案例类)。通过转换以下json格式来构建树结构:

{
  "type": "tree",
  "left": {
    "type": "leaf",
    "id": "1",
    "content": "abc"
  },
  "right": {
    "type": "leaf",
    "id": "1",
    "content": "abc"
  }
}

案例类

sealed abstract trait Node

case class Tree(
    left: Node
    right: Node
) extends Node

case class Leaf(
    id: String
    content: String
    ...
) extends Node

我的优化是使用Map [String,Node](使用id作为键)在构造树时缓存不同的节点,并避免使用相同的id创建重复的叶节点。但是,通过比较更改前后的内存消耗(通过使用本机内存跟踪和Yourkit内存快照),我没有发现内存减少。

我想知道Scala是否已经重用了内部相同的case类,因此不需要我的优化。

1 个答案:

答案 0 :(得分:0)

即使两个节点都相同,Scala也不会使它们的引用指向单个对象,因为它们实际上是不相同的,尽管它们是具有相同值的case类。另外,有时case类具有var's,并且节点以后可能会更改,因此让它们指向同一对象是不安全的。