繁体   English   中英

优化大型集合的垃圾回收

[英]Optimizing for garbage collection of large collections

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

然后,我从这些行列表中逐一读取数据,并将它们中的数据放入容器对象中。 我应该在继续阅读每一行时将列表中的各个行取消引用为null还是 应该最终取消对它们的引用以便可以对其进行垃圾回收?

由于每一行都是很大的,包含大的字符串/斑点/文本内容等,因此我正在尝试针对垃圾回收进行优化。 希望这不称为过早优化!

如果您还没有衡量程序的性能,那是过早的优化。

(并非在测量之前执行的所有优化都为时过早,但是这类微优化确实如此。)

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

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

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

但是,也可能存在性能上的缺点-取消引用涉及写入内存,而在现代的垃圾收集环境中,写入内存并不一定只是存储。 为了收集者的利益,可能还需要进行一些记账工作-在垃圾回收的上下文中查找“写障碍”和“卡片标记”。 写入也会对处理器缓存产生影响。 在多处理器系统上,它将导致处理器之间的高速缓存一致性流量,从而消耗带宽。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM