【发布时间】:2011-01-26 00:42:48
【问题描述】:
在 Java 运行时,如果我的应用程序释放内存,运行时是否会将内存释放回操作系统?还是回到我的流程?
【问题讨论】:
标签: java memory memory-management jvm
在 Java 运行时,如果我的应用程序释放内存,运行时是否会将内存释放回操作系统?还是回到我的流程?
【问题讨论】:
标签: java memory memory-management jvm
这取决于 JVM 实现,规范中未指定。
Sun JVM 将保留它作为第一步。一旦分配的内存的某个(可配置)百分比未使用,它会将其中的一部分返回给操作系统(该行为受MinHeapFreeRatio and MaxHeapFreeRatio settings 影响)。
【讨论】:
先回进程,最后也可以回操作系统。 GC分配的内存位于一个大的连续块(堆)或一组块中,GC“释放”只是释放堆中的分配,但不一定会返回给操作系统。一旦 GC 压缩,VM 就有可能将一些内存返回给操作系统。
GC 希望保留一定数量的空间,以便它可以快速处理未来的“新”内存请求。因此,GC 尽可能少地向操作系统发出大段内存请求。
【讨论】: