Java VM – 释放的内存是否返回操作系统?

在Java运行时,如果我的应用程序释放内存,运行时是否会将内存释放回操作系统? 或者回到我的流程?

这取决于JVM实现,并且未在规范中指定。

Sun JVM将作为第一步坚持下去。 一旦某个(可配置的)已分配内存百分比未被使用,它将将其中的一部分返回给OS(该行为受MinHeapFreeRatioMaxHeapFreeRatio设置的影响 )。

首先回到过程,但最终还是可以回到操作系统。 GC分配的内存位于一个大的连续块(​​堆)或一组块中,GC“释放”只是释放堆中的分配,但不一定回到操作系统。 GC压缩后,VM可能会将一些内存返回给操作系统。

GC希望保留一定的空间,以便快速处理未来的“新”内存请求。 因此,GC尽可能少地向操作系统请求大段内存。