Сумма, которую вы указываете с -Xmx, предназначена только для кучи, доступной пользователю - пространства, в котором вы динамически создаете объекты времени выполнения.
Процесс Java будет использовать гораздо больше места для собственных нужд, включая JVM, программу и другие библиотеки, пул констант и т. Д.
Кроме того, из-за того, как работает система сбора мусора, может быть выделено больше памяти, чем в настоящее время в куче - она просто еще не была возвращена.
Все это говорит о том, что установка вашей программы на максимальную кучу 256 МБ действительно снижает ее в современной системе. Для тяжелых программ вы можете запросить как минимум 1 Гб кучи.
Как вы упомянули, одной из возможных причин замедления является то, что часть памяти, выделенной для Java, выгружается на диск. В этом случае программа действительно начнет работать с диском, поэтому не переусердствуйте, если у вас мало физической памяти. В Linux вы можете получить статистику пропуска страниц для процесса, я уверен, что аналогичный способ есть в Windows.