2008-09-17 2 views
1

Я знаю, что нет «правильного» размера кучи, но какой размер кучи вы используете в своих приложениях (тип приложения, jdk, os)?Какой размер кучи вы предпочитаете?

Параметры JVM -Xms (начальный/минимальный) и -Xmx (максимум) позволяют контролировать размер кучи. Какие настройки имеют смысл при каких обстоятельствах? Когда подходят значения по умолчанию?

+1

Какой ответ вы ожидаете? Должен ли я ответить, что я запускаю свою Java с помощью `-Xmx512`? Что вы ожидаете? – 2008-09-17 13:29:48

+0

Да, но вы также должны добавить информацию о своем приложении, jdk и os. – trunkc 2008-09-17 13:42:25

ответ

1

Обычно я стараюсь не использовать кучи размером более 1 ГБ. Это будет стоить вам больших коллекций мусора.

Когда-нибудь лучше разделить приложение на несколько JVM на одной машине, а не на большие размеры кучи.

Основная коллекция с большим размером кучи может принимать> 10 монет (на неоптимизированных приложениях GC).

+1

Насколько велика куча, чтобы задержать JVM в течение 10 минут? Какую JVM вы использовали? Какие параметры GC вы использовали? – 2008-09-17 13:32:17

+0

У меня не было проблем с 1,3-гигабайтной кучей для Websphere 5.1 (IBM JDK1.4, Windows, никаких специальных параметров GC). – trunkc 2008-09-17 14:01:43

2

На самом деле я всегда считал очень странным, что Java ограничивает размер кучи. Собственное приложение обычно может использовать столько кучи, сколько захочет, пока не закончится виртуальное адресное пространство. Единственная причина ограничить кучу на Java - это сборщик мусора, который имеет определенную «лень» и не может мусор собирать предметы, если нет необходимости делать это. Это означает, что если вы выберете слишком большую кучу, ваше приложение будет постоянно использовать больше памяти, чем это действительно необходимо.

Тем не менее, за последние годы Солнце улучшило GC и, чтобы эмулировать поведение родного приложения C, я бы установил размер начальной кучи до 32 МБ (для небольших программ) или 64 МБ (для более крупных) и максимум до 1-2 ГБ. Если вашему приложению действительно требуется более 1 ГБ памяти, он, скорее всего, будет поврежден (если вы не справитесь с большими объектами данных), но я не вижу причин, по которым ваше приложение должно быть убито, просто потому, что оно переместило определенный размер кучи.

Конечно, это относится к обычным ПК. Если вы создаете Java-код для мобильных телефонов или других ограниченных устройств, вы, вероятно, должны использовать начальный и максимальный размер кучи для ограничений этого устройства.

1

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

jmap можно использовать, чтобы посмотреть, какая куча вы фактически используете, и является хорошей отправной точкой для правильной калибровки кучи.

+0

«Ни один размер не подходит для всех». Я не просил об одном размере. – trunkc 2008-09-17 13:56:46

5

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

Первое, что я сделал, это увеличить кучу до 1 концерта. это избавило от проблем с памятью, но все еще было медленным. Я также заметил, что IDEA регулярно замерзала в течение 10 секунд или около того, после чего используемая память была сокращена наполовину только для того, чтобы снова развернуться, и это вызвало идею сбора мусора. Теперь я использую его с -Xms512m, -Xmx768m, но я также добавил -Xincgc, чтобы активировать инкрементную сборку мусора.

В результате у меня есть мой старый IDEA: он работает гладко, больше не замерзает и никогда не использует более 600 м кучи.

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

3

Это зависит от типа приложения.Настольное приложение сильно отличается от веб-приложения. Сервер приложений сильно отличается от автономного приложения.

Это также зависит от используемой вами JVM. JDK5 и более поздние версии 6 включают улучшения, которые помогают понять, как настроить приложение.

Размер кучи важен, но его также важно знать, как он играет с сборщиком мусора.

JDK1.4 Garbage Collector Tuning

JDK5 Garbage Collector Tuning

JDK6 Garbage Collector Tuning

1

Вам нужно провести некоторое время в JConsole или VisualVM, чтобы получить четкое представление о том, что использование памяти плато. Подождите, пока все будет стабильным, и вы увидите характерную пилообразную кривую использования памяти кучи. Пики должны быть вашей 70-80% кучей, в зависимости от того, какой сборщик мусора вы используете.

Большинство сборщиков мусора запускают полные GC, когда использование кучи достигает определенного процента. Этот процент составляет от 60% до 80% от максимальной кучи, в зависимости от стратегии.

1

1.3Gb для приложения с большим графическим интерфейсом.

К сожалению, на Linux виртуальная машина, кажется, предварительно запрос 1.3G виртуальной памяти в той ситуации, которая выглядит плохо, даже если он не нужен (и вызывает много запутался брюзжание от пользователей)

1

На моей самой памяти интенсивное приложение:

-Xms250M -Xmx1500M -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC 
Смежные вопросы