Мы запускаем несколько экземпляров серверного процесса на одном компьютере с Linux. Коробка имеет 8 ядер и 16 ГБ оперативной памяти. Я запускаю каждый процесс с опцией -Xincgc, используя Java 1.6.
В приложении есть различные таймеры, которые отслеживают время выполнения различных задач. Когда происходит сборка мусора, я замечаю, что каждый java-процесс на коробке выводит на печать, что любая задача, которую он выполнял в то время, была медленной.
Это не останавливается в течение долгого времени, может быть, 100-300 мс или около того, но задержка является огромным фактором для этого. Это также не останавливается постоянно, просто периодически.
Когда происходит сборка мусора, это останавливает какой-либо процесс Java в любое время? Если так, есть ли способ обойти это? Должен ли я использовать другие параметры GC?
UPDATE:
Просто чтобы прояснить, я не беспокоюсь о том, что один процесс остановится, пока происходит GC. Я могу настроить параметры или оптимизировать для этого случая. Мне просто интересно, почему КАЖДЫЙ запущенный Java-процесс останавливается одновременно, когда я думал, что они более или менее независимы.