在Java运行时,如果我的应用程序释放内存,运行时是否会将内存释放回操作系统?或者回到我的流程?
答案 0 :(得分:4)
这取决于JVM实现,并且未在规范中指定。
Sun JVM将作为第一步保留它。一旦某个(可配置的)已分配内存百分比未被使用,它就会将其中的一部分返回给操作系统(行为受到MinHeapFreeRatio
and MaxHeapFreeRatio
settings的影响)。
答案 1 :(得分:1)
首先回到流程,但最终还是可以回到操作系统。 GC分配的内存位于一个大的连续块(堆)或一组块中,GC“释放”只是释放堆中的分配,但不一定回到操作系统。 GC压缩后,VM可能会将一些内存返回给操作系统。
GC希望保留一定的空间,以便能够快速为未来的“新”内存请求提供服务。因此,GC尽可能地向操作系统请求大段内存。