Я подозреваю, что вы можете использовать сортировки для большого индекса. Это то, что я точно знаю, может потребовать большой размер массива с Lucene. В любом случае, вы можете попробовать использовать 64-битную JVM со следующими параметрами:
-Xmx6G -XX:MaxPermSize=128M -XX:+UseCompressedOops
Последняя опция уменьшит 64-битные указатели памяти до 32-битных (до тех пор, пока куча не станет меньше 32 ГБ). Как правило, это сокращает накладные расходы памяти примерно на 40%, поэтому может помочь значительно увеличить объем памяти.
Обновление: Скорее всего, вам не нужен такой большой размер постоянного поколения, конечно, не 1G. Вероятно, у вас все в порядке с 128M, и вы получите конкретную ошибку, если перейдете на Java 6. Поскольку на вашем сервере вы ограничены 8G, вы можете сойти с 7G за кучу с меньшей разрешающей способностью. поколения. Будьте осторожны, не заходите в swap, это может серьезно замедлить работу Java.
Я заметил, что вы не упомянули -XX:+UseCompressedOops
в своем обновлении. Это может иметь огромное значение, если вы еще не пробовали. Возможно, вам удастся выжать немного больше места, уменьшив размер eden, чтобы предоставить заемному поколению больше места. Кроме того, я думаю, вам просто понадобится больше памяти или меньше полей сортировки.