как выбрать jvm размер "кучи"?

Грамматика для C++ является видом известно волосатых. Существует хороший поток в Lambda об этом, , но суть - то, что грамматика C++ может потребовать произвольно большого предвидения.

Для вида вещи я предполагаю, что Вы могли бы делать, я буду думать о взламывании или Гну CC, или Шплинт . CC гну в особенности выделяет часть поколения языка довольно полностью, таким образом, Вы могли бы быть лучшими от создания нового g ++ бэкенд.

24
задан LB40 30 October 2009 в 17:27
поделиться

5 ответов

У меня вопрос, как выбрать мин. и максимальные значения, а разница между двумя (если max-min будет маленький или большой?)

Краткий ответ: не угадайте, профилируйте свое приложение.

jconsole может предоставить вам полезные высокоуровневые данные , такие как ощущение основного резидентного набора по сравнению с временные данные, которые мы обычно выделяем и собираем мусор. То, что вы увидите, если посмотрите на вкладку памяти этого дисплея, обычно похоже на пилу. Нижний угол зубьев пилы примерно равен тому месту, где я обычно устанавливаю минимум кучи, тогда как я бы использовал пик или наклон зубьев пилы, чтобы поэкспериментировать с максимумом кучи. Если ваши зубы очень крутые, вы можете подумать о большой куче, чтобы отложить сбор мусора. Однако, если это не так, вы можете попробовать уменьшить максимум кучи, чтобы увидеть, может ли это оставить больше ресурсов для других процессов на вашем компьютере (например).

Вы также должны учитывать серверную виртуальную машину , так как это вызовет другое поведение при сборке мусора.

С учетом всего вышесказанного вам также следует использовать более подробный инструмент, такой как jvisualvm, для профилирования памяти использование вашего процесса . Возможно, у вас есть утечка памяти или жадный распределитель, который вы можете настроить или устранить. Это полностью изменит вашу потребность в куче.

19
ответ дан 28 November 2019 в 23:59
поделиться

Вам следует включить ведение журнала сборщика мусора и проверить, где происходит ваш OOM.

-verbose:gc
-Xloggc:gc.log  
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails

Возможно, вы столкнулись с ограничениями на свободное пространство, отрегулируйте его с помощью -XX: MaxPermSize = YYYm

В любом случае, чтобы ответить на ваш вопрос, я начну без минимумов и установлю относительно высокий максимум. Затем я составляю график журнала gc и выясняю, где находится мое состояние; визуально выбирайте размер выше среднего для разных поколений. Прочтите это как финансовую диаграмму, вы захотите увидеть хороший разброс у новых поколений и постоянный рост и сбор в постоянном поколении. Как уже упоминалось, также нанесите на график свое постоянное пространство, чтобы убедиться, что вы не увеличиваете постоянно.

Настройка GC - это искусство, а не наука.

5
ответ дан 28 November 2019 в 23:59
поделиться

В самом деле, установка огромного максимального значения вслепую - не очень хорошая идея (измеряйте, не угадайте), и эта стратегия приведет к очень долгому «остановите мир». Сборщики мусора, которые могут быть нежелательны с точки зрения взаимодействия с пользователем (всегда помните, что «чем больше куча, d предложить профилировать ваше приложение и настроить кучу, чтобы найти хороший компромисс между (основной) частотой сборки мусора и (основной) продолжительностью сборки мусора, минимизируя время ответа конечному пользователю. Я настоятельно рекомендую прочитать эту замечательную запись в блоге (и все другие) от Кирка Пеппердайна для получения дополнительных сведений.

Чтобы ответить на вопросы о минимальном и максимальном значениях, я всегда использую одни и те же значения (для лучшего запуска производительности и лучшей воспроизводимости).

d предложить профилировать ваше приложение и настроить кучу, чтобы найти хороший компромисс между (основной) частотой сборки мусора и (основной) продолжительностью сборки мусора, при минимальном времени ответа конечному пользователю. Я настоятельно рекомендую прочитать эту замечательную запись в блоге (и все другие) от Кирка Пеппердайна для получения дополнительных сведений.

Чтобы ответить на вопросы о минимальном и максимальном значениях, я всегда использую одни и те же значения (для лучшего запуска производительности и лучшей воспроизводимости).

3
ответ дан 28 November 2019 в 23:59
поделиться

Правильный ответ: нет правильного ответа каждый проект отличается, и вам придется настраивать конфигурацию размера кучи для каждого проекта. Я бы начал с малого и постепенно увеличивал размер кучи, пока ваше приложение не заработало должным образом.

Вы правы, установка огромного максимального значения - не лучшая идея.

2
ответ дан 28 November 2019 в 23:59
поделиться

Если вы испытываете OOME, я бы начал с увеличения максимального объема памяти, насколько это возможно, и посмотрел, решит ли это проблему. Сначала позвольте вашей машине решить проблему производительности. Если проблема не исчезнет, ​​вы можете изучить диагностику производительности, чтобы выявить узкие места и поработать в тех областях, где ваше приложение может давать утечки или занимать большую часть памяти.

Джефф Этвуд написал хорошую статью о CodingHorror, которая объясняет такое отношение; наиболее экономически эффективное решение проблемы с производительностью - задействовать оборудование (или, в данном случае, увеличенные ресурсы памяти), прежде чем вкладывать время разработчика в устранение неполадок:

http://www.codinghorror.com/blog/ archives / 001198.html

2
ответ дан 28 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: