我正在阅读演示文稿"Building memory efficient Java applications",并在幻灯片11上看到他们问的问题:“典型堆中有多少个活动集合?”
答案是10k到数百万。
我会非常谦虚地说我不知道从哪里开始这个问题。
什么是直播收藏与“非直播收藏”?通过集合,它们是指java.util.collections吗?
集合是否存在于堆中?我想因为它们没有在堆栈上分配,所以只留下了堆。
有几千万集合生活在堆上的启示暗示了什么?我只能假设这是一件坏事。
答案 0 :(得分:2)
是的,他们指的是java.util
个收藏品。 (他们会详细介绍每种集合类型 - HashSet
,ArrayList
,等等 - 所以是的。)
集合确实存在于堆上,但是一旦它们被垃圾收集 - 一旦它们没有被正在运行的应用程序引用 - 它们就不被认为是“活动的”。
堆上的大量集合并不是坏事 - 它只是表明集合的使用频繁,以保证仔细查看集合实现,特别是它们的内存效率。 (人们广泛使用好的抽象可能是件好事!)
他们几乎肯定不会只谈论一个应用程序 - 我坦率地假设他们采用了许多实际应用程序并对其进行了分析。
答案 1 :(得分:0)
实时意味着仍有对它们的引用。那就是 - 他们没有资格进行垃圾收集。由于演示文稿是关于内存效率的,我猜它们意味着集合(是的,java.util.Set / List / Etc)是常用的,从内存的角度来看,选择正确的集合很重要。
答案 2 :(得分:-1)
他们正在谈论他们的特定应用,你的可能有任意数量的集合,如果你不使用任何集合,甚至是零。