作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些使用以下配方的数据处理代码:
当 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/
我是一名优秀的程序员,十分优秀!