当不再需要时,JVM 是否会向操作系统提供可用内存?

2022-09-03 18:20:44

我有一个应用程序,对于某些进程,它暂时需要一定数量的内存/堆。给定 JVM 的最大堆大小的合理值作为选项,JVM 从一个小堆开始,并按需从操作系统请求更多内存。

我的问题是,当我的应用程序不再需要太多内存时,JVM是否会将额外的内存返回给操作系统(例如,用于其他进程)。目前,我的应用程序似乎永远保留该内存,即使不再需要。


答案 1

JVM确实将内存返回给操作系统,但只是非常不情愿,因为它可能很快就会再次需要它,并且从操作系统获取内存是一项相对昂贵的操作。

如果您希望 JVM 更热切地将内存返回到操作系统,则可以使用 Oracle JVM 的调优参数,特别是-XX:MaxHeapFreeRatio-XX:MinHeapFreeRatio


答案 2

不一定。这取决于您使用的 JVM。我知道一个案例,IBM的JVM。我们还遇到了一个问题,即程序无法释放内存,即使不需要也是如此。一些信息可以在IBM的网站上找到。


推荐