我正在尝试优化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类,因此不需要我的优化。
答案 0 :(得分:0)
即使两个节点都相同,Scala也不会使它们的引用指向单个对象,因为它们实际上是不相同的,尽管它们是具有相同值的case类。另外,有时case类具有var's,并且节点以后可能会更改,因此让它们指向同一对象是不安全的。