优化大型集合的垃圾收集

时间:2011-03-08 21:04:02

标签: java list collections garbage-collection

我正在从数据库中读取此类List<Rows<Long,String,ByteBuffer>>

的大型集合 然后,我逐个从这些行列表中读取数据,并将数据从它们放入容器对象中。 我是否应该将列表中的各个行取消引用为null,因为我继续阅读每个行我最终应该最终取消引用它们以便它们可以垃圾收集?

由于每行都很大,包括大字符串/ blob /文本内容等,我正在尝试优化垃圾收集。我希望这不称为过早优化!?

4 个答案:

答案 0 :(得分:3)

如果你没有测量你的程序的性能,那么这是一个过早的优化。

(并非在测量之前执行的每个优化都是过早的,但这些微优化都是。)

答案 1 :(得分:3)

我建议取消引用它们。这不是过早优化,因为与时间不同,程序可用于完成它的内存量不在您的控制之下。

答案 2 :(得分:2)

正如larsmans所说,这是过早优化的定义。然而,像这样的问题经常弹出而不是忘记它们我想立即添加分析点(由开/关开关包裹 - 如Logger.isEnabled())然后继续。查看http://netbeans.org/features/java/profiler.html以获得简单的分析工具/设置

答案 3 :(得分:1)

正如larsmans所说,存在复杂性的缺点。

但是也可能存在性能劣势 - 使引用无效涉及写入内存,而在现代垃圾收集环境中,写入内存不一定只是存储。为收集者的利益可能还有一些簿记 - 在垃圾收集的背景下查找“写屏障”和“卡片标记”。写入也会对处理器缓存产生影响;在多处理器系统上,它将导致处理器之间的高速缓存一致性流量,从而消耗带宽。

现在,我认为这些影响都不大。但是你应该意识到写入内存并不总是像你想象的那么便宜。这就是为什么你必须在优化之前进行分析,然后再进行分析!