【问题标题】:Java VM - does the freed memory return to the OS?Java VM - 释放的内存是否返回到操作系统?
【发布时间】:2011-01-26 00:42:48
【问题描述】:

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

【问题讨论】:

    标签: java memory memory-management jvm


    【解决方案1】:

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

    Sun JVM 将保留它作为第一步。一旦分配的内存的某个(可配置)百分比未使用,它会将其中的一部分返回给操作系统(该行为受MinHeapFreeRatio and MaxHeapFreeRatio settings 影响)。

    【讨论】:

    • 我从未见过 Java VM 在向系统返回内存方面表现得非常激进——这可能是默认情况下的一件好事。 Java 进程往往运行时间很长,并且不断扩展和收缩会使内存碎片化。对于大多数服务器端解决方案,释放内存会导致不确定的行为和较差的性能,但是如果他们将决定权留给用户(使用 -Xmx/-Xms 设置)会很好。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多