%20%D0%B0%D0%B2%D0%B0%D1%80%D0%B8%D0%B9%D0%BD%D0%BE%20%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D1%88%D0%B0%D1%8E%D1%82%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83%2C%20%D1%85%D0%BE%D1%82%D1%8F%20%D0%B2%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%B0%D1%87%D0%BA%D0%B8%20%D0%B5%D1%89%D0%B5%20%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE%20%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BC%D0%B5%D1%81%D1%82%D0%B0%3F.png)
Итак, действительно очень простой вопрос. На моей машине разработчика с ограниченным объемом оперативной памяти (8 ГБ оперативной памяти, Win 7 x64, 8 ГБ файла подкачки), когда у меня заканчивается доступная оперативная память, программы сначала начинают тормозить, а затем в конечном итоге вылетают. Чаще всего первой вылетают JVM и очень удачно. Как это возможно? Как будто файла подкачки вообще нет, но когда я достигаю 8-го гига используемой оперативной памяти, JVM (а иногда и другие программы) вылетают почти мгновенно.
Да, я прекрасно знаю все механизмы подкачки на месте, в основном по HW, которые снова должны работать с файлом подкачки, как будто есть много доступной оперативной памяти, не зная ничего об использовании или даже существовании файла подкачки. Так почему же я на самом деле наблюдаю совершенно разное поведение?
решение1
Можете ли вы запустить jprofiler и исследовать память кучи. Также неясно, какой объем памяти требуется для исполняемой программы Java. Обычно 8 ГБ ОЗУ считается приличным. Если программа Java создает много потоков и потоки не завершаются, то это может вызвать все эти проблемы. Пожалуйста, проверьте программу Java на предмет количества созданных объектов и характера потоков.