JVM, к счастью, не знает о нижележащем управлении памятью ОС.Я помню, как недавно посещал сессию JavaOne, посвященную оптимизации GC, и оратор подчеркнул, что вы всегда должны обеспечивать наличие достаточного объема свободной памяти (ОЗУ, а не подкачки) для запуска JVM, чтобы избежать подкачки любой ценой, поэтому никогдавыделите больше памяти для JVM, чем то, что у вас есть в данный момент в вашей системе.Более того, из-за того, как работают некоторые алгоритмы сбора GC, это может привести к огромным потерям производительности, если блоки собираемой ими памяти выгружаются.
Поэтому никогда не отдавайте JVM больше памяти, чем физически доступно в вашей системе, или если вы ожидаете, что потребление памяти со временем возрастет из-за некоторых внешних процессов, выделите пространство кучи, которое гарантирует, что оно никогда не будетбыть подкачаннымИ если вы не можете удовлетворить эти условия, тогда вам нужно больше оперативной памяти:)
Обновление: немного поискал в SO, и я нашел this .Здесь kdgregory утверждает, что подкачка не должна быть проблемой из-за того, как работает GC, но он рассматривает подкачку из-за нормальных условий, то есть памяти не трогают какое-то время, а это не ваш случай, потому что у вас закончитсяпамять, и вы обязательно начнете пейджинг.Кроме того, в случае, если вы используете какой-то вкус Linux, проверьте ответ Джона Ферминеллы и его замечательное сообщение в блоге , объясняющее, как понять и настроить своп в Linux.