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

后端 未结 3 1887
灰色年华
灰色年华 2020-12-06 01:36

I have an application that temporarily needs some certain amount of memory/heap for some processes. Given a reasonable value of maximum heap size to the JVM as an option, th

相关标签:
3条回答
  • 2020-12-06 02:02

    The JVM does return memory to the OS, but only very reluctantly, since it may need it again soon, and getting memory from the OS is a relatively expensive operation.

    If you want the JVM to return memory to the OS more eagerly, you can use the tuning parameters of the Oracle JVM, specifically -XX:MaxHeapFreeRatio and -XX:MinHeapFreeRatio

    0 讨论(0)
  • 2020-12-06 02:16

    It depends on the version indeed and on the garbage collectors selected. I found that java 1.8.0_73 does occasionally release small amounts back to the OS by default. This is the earliest version I remember seeing it without having to adjust JVM parameters, but it may very well apply to earlier ones, I don't know an exact version.

    Unless parameters are adjusted, by default it likely won't release anything unless 60-70% of your heap is unused.

    Herein may lie a performance consideration - java had a reputation for being slow, so by default the JVM may try to minimise allocation from the OS and making garbage collection as efficient as it can by holding on to a lot of memory and doing it less often.

    I wonder if it might be less stingy with memory if the OS has relatively little free memory left..?

    0 讨论(0)
  • 2020-12-06 02:20

    Not necessarily. It depends on JVM you use. I know of one case, with IBM's JVM. We also had an issue with a program not freeing memory, even when it's not needed. Some info can be found on IBM's site.

    0 讨论(0)
提交回复
热议问题