Я не могу говорить с Weka, я не знаю ваш набор данных или количество элементов в нем. Количество элементов имеет значение, как в 64-битной виртуальной машине Java, указатели огромны, и они складываются.
Но НЕ создавайте JVM больше физической ОЗУ. Своп просто не вариант для Java. Обмен JVM является мертвым JVM. Своп предназначен для редко используемых процессов простоя.
Также обратите внимание, что значение Xmx и размер физической кучи не совпадают, физический размер всегда будет больше, чем размер Xmx.
Вы должны предварительно выделить кучу JVM (Xms == Xmx) и опробовать различные значения до тех пор, пока МОСТ вашей физической памяти не будет израсходован. Это ограничит полную сборку мусора и фрагментацию памяти. Это также помогает (немного) сделать это в новой системе, если вы выделяете такую большую часть общего пространства памяти.
Но что бы вы ни делали, не позволяйте Java менять местами. Обмен и сборщик мусора не смешиваются.