【发布时间】:2012-02-03 10:52:43
【问题描述】:
我发现如果我的应用程序有很多可用内存,它会使用比它需要的更多的内存。我听说这种行为在所有 Java 应用程序中都很常见,但我无法接受。
所以问题是如何强制 Java 使用更少的内存?
我知道我可以每隔几秒手动调用System.gc(),但是这样做可以吗?还有其他方法吗?
P.S. 我的应用程序会在生产服务器上定期更新,我需要监控内存使用情况是否有一些泄漏等(通常没有泄漏,但如果出现泄漏,我应该尽快看到它),而且我还需要预测应该升级硬件的时间。如果 jvm 不可预测地改变了它的内存饥饿,所有这些事情都很难做到。所以我唯一想要的是强制 jvm 在内存使用方面是可预测的(如果用户数量翻倍,内存也应该翻倍)
【问题讨论】:
-
也许是时候重新考虑一下为什么它是不可接受的了。你能给出一个技术上的理由吗,或者是什么让你不舒服?
-
也许您不应该在生产服务器上进行测试?并且仅在您知道没有泄漏时才部署?
-
这不是测试,当然我也有测试服务器,但是运行负载不同
-
听起来您需要对应用程序进行内存分析,以便了解内存的使用情况。查看您为应用程序提供的最大内存不是很有用。一个更好的数字是 GC 之后使用了多少内存。鉴于内存成本非常低,我建议您获得比您可能需要的更多的内存,并且您不必在以后监视它或升级服务器(全面省钱)
-
32 GB:8 x 4 GB 内存 1600 成本约为 160 美元。如果您从这么多内存开始,您可能不需要对其进行监控,这样可以在系统的整个生命周期内轻松节省这么多内存。