Нужно сказать, что нужно потратить много времени на тестирование различных настроек сборки мусора, но, как было упомянуто выше, это обычно бесполезно.
В настоящее время я работаю над проектом, включающим среду с ограниченным объемом памяти и относительно большие объемы данных - есть несколько больших фрагментов данных, которые доводят мою среду до предела, и хотя я смог принести память использование так, чтобы в теории это работало просто отлично, я все равно получал бы ошибки пространства кучи - подробные параметры GC показали мне, что он пытается собрать мусор, но безрезультатно. В отладчике я мог бы выполнить System.gc () и убедиться, что будет «много» доступной памяти ... не много дополнительной, но достаточно.
Следовательно, единственный раз, когда мое приложение вызывает System.gc (), это когда он собирается ввести сегмент кода, где будут выделены большие буферы, необходимые для обработки данных, и тест на доступную свободную память показывает, что я Я не гарантирован, чтобы иметь это. В частности, я смотрю на среду объемом 1 ГБ, где статические данные занимают не менее 300 МБ, причем основная часть нестатических данных связана с выполнением, за исключением случаев, когда обрабатываемые данные имеют размер не менее 100-200 МБ. источник. Все это является частью процесса автоматического преобразования данных, поэтому все данные существуют в течение относительно коротких периодов времени в долгосрочной перспективе.
К сожалению, хотя информация о различных параметрах настройки сборщика мусора доступна, это в значительной степени экспериментальный процесс, и специфика более низкого уровня, необходимая для понимания того, как справляться с этими конкретными ситуациями, получить нелегко.
С учетом всего вышесказанного, несмотря на то, что я использую System.gc (), я все же продолжал настраиваться с использованием параметров командной строки и сумел значительно увеличить общее время обработки моего приложения, несмотря на то, что не смог преодолеть камень преткновения, работая с большими блоками данных. При этом System.gc () - это инструмент .... очень ненадежный инструмент, и если вы не будете осторожны с его использованием, вам захочется, чтобы он работал не чаще, чем не.