В операционной системе работает 10 виртуальных машин JVM. На самом деле большинство ничего не делает — время от времени просто делает работу. Каждый процесс выделяет 600 МБ системной памяти. Я знаю, что физически можно использовать практически до 100 МБ. Остальные 500 МБ для каждого из этих процессов — это память, управляемая JVM (OldGen и т. д.). К сожалению, в моей системе всего 2 ГБ ОЗУ, и в результате большая часть выделенной памяти попадает в своп. Это значит, что когда приходит время одной из машин — первой, своп считывается в системную память за десятки секунд.
Есть ли способ заставить JVM освободить память для операционной системы после выполнения задачи? Например, GC будет запускаться каждые 1-5 минут, и в результате память процесса будет освобождена для системы.
Я использую: Linux x86_64 SMP, Java HotSpot (TM) 64-битный сервер VM 1.6.0