【发布时间】:2021-02-15 13:39:29
【问题描述】:
我有一个字符 trie 数据结构,如下所示:
sealed class TrieNode(val children: MutableMap<Char, TrieNode>) {
class NormalNode(kids: MutableMap<Char, TrieNode>) : TrieNode(kids)
class EndNode(kids: MutableMap<Char, TrieNode>, val info: SubInfo) : TrieNode(kids)
}
如您所见,我的 trie 由 NormalNode 和 EndNode 组成,其中 NormalNodes 是内部节点,EndNodes 是一次叶子。
当我在运行时创建 trie 后进行内存分析时,我可以看到 TrieNode 类的浅层内存使用量为1 MB,而保留使用量为120 MB。代码在android中运行,实现似乎没有任何bug。
我的问题是类的保留内存在这种嵌套/复合实现中是否有意义。浅尺寸是对象本身的尺寸。但保留大小是所有私有引用(仅通过此路径访问的引用)及其子引用的总大小。现在考虑由相同类型的对象组成的树/树。每个节点的浅层大小将是节点的大小,但保留大小将是节点的大小 + 其所有子节点的大小之和,因为它的所有子节点只能通过这个父节点访问?
【问题讨论】:
标签: java kotlin memory profiling