繁体   English   中英

JVM 是否在不再需要时将可用内存返还给操作系统?

[英]Does the JVM give back free memory to the OS when no longer needed?

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

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

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

如果你想让 JVM 更急切地将内存返回给操作系统,你可以使用Oracle JVM调优参数,特别是-XX:MaxHeapFreeRatio-XX:MinHeapFreeRatio

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

这确实取决于版本和选择的垃圾收集器。 我发现默认情况下,java 1.8.0_73 偶尔会释放少量回操作系统。 这是我记得看到它的最早版本,无需调整JVM参数,但它很可能适用于早期版本,我不知道确切的版本。

除非调整参数,否则默认情况下它可能不会释放任何内容,除非您的堆中有 60-70% 未使用。

这里可能存在性能方面的考虑 - Java 以缓慢而著称,因此默认情况下 JVM 可能会尝试最小化操作系统的分配,并通过占用大量内存并减少执行频率来尽可能提高垃圾收集的效率.

我想知道如果操作系统剩余的可用内存相对较少,它对内存是否会不那么吝啬..?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM