gpt4 book ai didi

java - 如何估计调用 System.gc() 时剩余的内存量?

转载 作者:行者123 更新时间:2023-11-30 09:58:11 25 4
gpt4 key购买 nike

我有一些使用以下配方的数据处理代码:

  • 尽可能多地读入内存中的数据(称之为“ block ”)
  • 对 block 进行处理
  • 将处理后的 block 写入磁盘
  • 重复
  • ...
  • 合并所有处理过的 block 以获得最终答案。

当 block 尽可能少时,最后一个阶段是最有效的,所以我希望第一阶段读入尽可能多的数据以适合内存。我可以通过查询 Runtime.freeMemory() 来做到这一点.

但是,这意味着我需要调用 System.gc() ,或者 Runtime.freeMemory() 返回的数字远小于我可以安全分配的内存量。

我听很多权威人士说显式调用 System.gc() 是个坏主意。有什么办法可以避免这种情况吗?

最佳答案

即使您在检查您有多少内存之前立即调用 System.gc(),也不能保证垃圾收集实际上已经发生。我自己真的不会打扰,我会设置一个固定的 block 大小(最好通过属性或类似的配置)并始终使用它。如果您的程序的其余部分足够简单,您可以只使用 block 大小加上固定数量的兆作为堆大小。如果您的程序大小由于其他原因太不确定,您可以考虑并排运行两个程序并使用 IPC 机制。

当然,您的代码很可能需要对内存进行更细粒度的控制,但我谦虚地建议您当时使用了错误的语言;或者至少是错误的运行时(那里有 RT java 产品,我认为它们更适合这类事情)。

如果这看起来不是最有用的答案,我很抱歉,但基本上我想知道您是否真的需要这个?

关于java - 如何估计调用 System.gc() 时剩余的内存量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1147511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com