我有使用以下配方的一些数据处理代码:如何估计调用System.gc()时剩余的内存量?
- 读入尽可能多的数据将装入内存(这可称为“块”)
- 在块
- 写进行处理出处理块磁盘
- 重复
- ...
- 合并所有的处理块,以获得最终的答案。
最后一个阶段在块数尽可能少的情况下效率最高,所以我希望第一阶段能够读入尽可能多的数据以适应内存。我可以通过查询Runtime.freeMemory()
来做到这一点。
但是,这意味着我需要拨打System.gc()
,或Runtime.freeMemory()
返回的号码比我可以安全分配的内存量要小得多。
我听说过一些权威人士说,明确呼吁System.gc()
是一个坏主意。有什么办法可以避免这种情况吗?
当然,如果我有一个可靠的方法来测量我分配的内存量时,这只会有所帮助。 – 2009-07-18 14:32:06
即使这样也不行,因为虚拟机可能已经生成了随后由其他进程分配的页面。但在这种情况下的经验法则是,第一个大约至少是可预测的。 – 2009-07-18 16:38:20