0

我很感兴趣有没有办法动态增加或缩小允许 Java 占用的内存?我知道这通常是在应用程序启动时完成的,但在生产时看到它会很酷。

4

2 回答 2

3

JVM 已经这样做了。它根据使用情况调整堆大小,并可以将内存返回给操作系统(尽管并非总是如此)

你不能改变的是最大值。您无法更改它的原因是它在启动时将此虚拟内存保留为单个连续块,这意味着它无法缩小或增长它。

给出最大值就是这样,我建议设置为一个高值,您宁愿 JVm 失败而不是分配更多内存。在这种情况下,调整这个恕我直言是没有意义的。

顺便说一句,除非您非常了解应用程序的工作负载和使用情况(以及将来),否则我不建议设置最小大小。通常为基准测试、已知负载和应用程序版本设置最小值,但这并没有对于负载和代码随时间变化的应用程序来说,这不是一个好主意。

于 2013-09-17T08:54:39.630 回答
1

我认为这高度依赖于您使用的 JVM。对于 Oracle 的参考实现(OpenJDK/HotSpot),我认为这是不可能的,初始值是固定的。

但是还有其他 JVM 实现,例如,我知道 IBM 有一个自己的 JVM,它在这方面的行为可能会有所不同。我建议仔细查看 JVM 文档。

于 2013-09-17T09:06:10.593 回答