Прежде всего помните, что параметр вы устанавливаете с -Xmx
(так как это так, как я полагаю, вы устанавливаете размер кучи) является размер кучи доступна для кода Java, а не объем памяти виртуальной машины Java будет потреблять. Разница связана с структурами домохозяйства, которые поддерживаются JVM (структуры сборщиков мусора, служебные данные JIT и т. Д.), Иногда память, выделенная собственным кодом, буферами и т. Д. Размер этой дополнительной памяти зависит от версии JVM, используемого приложения и других факторов, но я видел, что JVM выделяют в два раза больше ОЗУ, чем размер кучи, видимый для приложения. Для среднего случая я обычно считаю, что 50% - это безопасная маржа, приемлемая на 20-30%. Если вы зададите размер кучи близким к объему ОЗУ на вашем компьютере, вы попадете на своп, и производительность пострадает.
Теперь для перечисленных вопросов:
Пермь ген представляет собой отдельное пространство из кучи по крайней мере, в JDK Oracle, 6. Это отдельное, потому что он подвергается совершенно разные правилам управления памятью, чем обычная куча. Кстати, 2 ГБ пространства для пергена огромны - вы уверены, что вам это действительно нужно?
Что касается второго вопроса, см. Выше.Если это JDK от Oracle, вы, вероятно, столкнетесь с проблемой, так как пермят и куча суммируются, но будет дополнительная память, обычно порядка 20-50% вашей кучи на 6 ГБ, и вместе с кучей и perm space это будет быть больше, чем ваша оперативная память. Сначала попробуйте установить эту настройку, но как только использование кучи памяти и кулачка будет близким к их настроенным ограничениям, у вас может закончиться нехватка памяти.
thx ... размеры были ориентировочными ... но читали где-то, что permgen - это пространство, зарезервированное из кучи ... ni думаю, что нужно принимать во внимание множество других требований к memry, например, стек за нить и другие требования к памяти на экземпляр jvm ... какая оптимизация jar? – sasa
Может ли jvm не использовать swap, подобный os ... вместо ужасной ошибки OOM? – sasa