Ответ: GC Java 11 (при явном вызове, например, через System.gc()
) может уменьшить используемую память процесса Java (в Java, известной как totalMemory
).
В Java 8 сборщик мусора по умолчанию не смог уменьшить объем используемой памяти процесса Java.Память, занятая процессом Java, никогда не освобождалась.Только если вы переключаетесь на сборщик мусора G1GC
(опция '-XX:+UseG1GC'
), Java 8 может уменьшить используемую память процесса Java (если вы вручную вызываете System.gc()
).
«Свободная память»"является памятью, занятой процессом Java, но которая в настоящее время не используется.Поэтому, если вы выполняете сборку мусора и память, занимаемая Java, уменьшается, объем свободной памяти также уменьшается.
Поэтому наиболее распространенным способом вычисления «свободной памяти» процесса Java является использование
Runtime r = Runtime.getRuntime();
long free = r.maxMemory() - r.totalMemory() + r.freeMemory();
Этот способ не зависит от текущей памяти, занимаемой процессом Java.