当不再需要时,JVM 是否会向操作系统提供可用内存?
2022-09-03 18:20:44
我有一个应用程序,对于某些进程,它暂时需要一定数量的内存/堆。给定 JVM 的最大堆大小的合理值作为选项,JVM 从一个小堆开始,并按需从操作系统请求更多内存。
我的问题是,当我的应用程序不再需要太多内存时,JVM是否会将额外的内存返回给操作系统(例如,用于其他进程)。目前,我的应用程序似乎永远保留该内存,即使不再需要。
我有一个应用程序,对于某些进程,它暂时需要一定数量的内存/堆。给定 JVM 的最大堆大小的合理值作为选项,JVM 从一个小堆开始,并按需从操作系统请求更多内存。
我的问题是,当我的应用程序不再需要太多内存时,JVM是否会将额外的内存返回给操作系统(例如,用于其他进程)。目前,我的应用程序似乎永远保留该内存,即使不再需要。
JVM确实将内存返回给操作系统,但只是非常不情愿,因为它可能很快就会再次需要它,并且从操作系统获取内存是一项相对昂贵的操作。
如果您希望 JVM 更热切地将内存返回到操作系统,则可以使用 Oracle JVM 的调优参数,特别是-XX:MaxHeapFreeRatio
-XX:MinHeapFreeRatio