Прав ли я, когда говорю, что freeMemoryProc не является истинным измерением, поскольку оно зависит от того, когда начнет работать ГХ?
Да ... вроде. Это мера количества памяти, которая в данный момент не выделена, а не памяти, которую можно было бы выделить при необходимости.
Есть ли лучший способ (предпочтительно независимый от GC) для подсчета объема доступной памяти для моего приложения?
Нет способа сделать это независимо от сборщика мусора. В общем, единственный способ определить, используется ли память, выделенная объектам в данный момент, в том смысле, что она не является несобранным мусором, - это ... запустить сборщик мусора.
Лучшее, что вы можете сделать, - это зафиксировать использование памяти сразу после запуска сборщика мусора и надеяться, что структура использования памяти будет относительно гладкой.
Обратите внимание, что запуск ГХ просто для того, чтобы узнать, сколько памяти осталось, является плохой идеей с точки зрения производительности ... и особенно в приложениях, близких к реальному времени. (Но я думаю, вы уже это знаете!)