我正在通读演示文稿"Building memory efficient Java applications",并在幻灯片11上看到他们问了一个问题:“一个典型的堆中有多少个实时集合?”
答案是10k到数百万。
我会非常谦虚地说,我不知道从哪里开始这个问题。
什么是实时集合与“非实时集合”?所谓集合,是指java.util.collections吗?
集合是否存在于堆中?我想,因为它们不是在堆栈上分配的,所以只剩下堆。
堆上有10k到数百万个集合,这一发现暗示了什么?我只能假设这是一件坏事。
发布于 2012-02-02 08:06:28
是的,他们指的是java.util集合。(它们详细介绍了每种集合类型-- HashSet、ArrayList等等--所以是的。)
集合确实存在于堆上,但是一旦它们可以被垃圾收集--一旦它们不被运行的应用程序引用--它们就不被认为是“活动的”。
堆上有大量的集合并不是一件坏事--这只是表明集合被频繁使用,因此需要更仔细地查看集合实现,特别是它们的内存效率。(人们广泛使用好的抽象概念可以说是一件好事!)
几乎可以肯定的是,他们谈论的不仅仅是一个应用程序--坦率地说,我假设他们采用了许多现实世界的应用程序,并对这些应用程序进行了分析。
发布于 2012-02-02 08:09:08
Live意味着仍然有对它们的引用。也就是说,它们不符合垃圾收集的条件。由于演示是关于内存效率的,我猜他们的意思是集合(是的,java.util.Set/List/等)是常用的,从内存的角度来看,选择正确的集合很重要。
发布于 2012-02-02 07:59:43
他们在谈论他们的特定应用程序,你的应用程序可能有任意数量的集合,如果你不使用任何集合,甚至是零。
https://stackoverflow.com/questions/9105189
复制相似问题