Честно говоря, причин для такого поведения может быть много. При вышеупомянутых обстоятельствах вам, вероятно, придется настроить сборщик мусора в соответствии с вашими результатами. У Oracle есть отличный ресурс на http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
В основном, для краткости ГХ по умолчанию, существует 2 типа прогонов: 1) Частичный ГХ, где освобождаются объекты молодого возраста. 2) Полный сборщик мусора, где сбор мусора выполняется над всеми объектами.
Можете ли вы указать в журнале аргументы в виде -XX: + PrintGCDetails -XX: + PrintGCTimeStamps. Ваша задержка может быть связана с полным сбором мусора, так как частичный сборщик мусора, как правило, не боится повреждений Как вы сказали, доступно много оперативной памяти, но не могли бы вы указать выделенный размер кучи. При любом повреждении это происходит из-за частичного ГХ (вероятность низкая), затем один раз попробуйте с одновременной меткой и разверните, используя + UseConcMarkSweepGC, так как это сделано специально для больших потерь в частичном ГХ