2013-04-17 4 views
3

Предположим, у меня много памяти на окне Unix. И у меня есть Java-приложение, которое не использует всю эту кучу. Первоначальные тесты показывают, что это кажется прекрасным с 100 МБ. Однако, когда он не отображается, память растет до 1 ГБ и выше. Возможно, мне было бы все равно, если бы не тот факт, что время от времени поток обработки, в котором приложение входит, похоже, задыхается. Одно из возможных (очень неопределенных) объяснений заключается в том, что виновником является упомянутое приложение Java.Должны ли вы накрывать размер кучи java, если вам это не нужно?

Вопрос: Может быть, оставив кучу ненужной высокой отсрочивает вывоз мусора так долго, что, когда он, наконец, умирает, у него есть «так много сделать», что она зримо влияет на производительность?

Возможно, я должен упомянуть, что мы все еще используем Java 1.4 (довольно старая система).

ответ

1

Вы правы, что время GC увеличивается с размером кучи. Большая куча означает большую работу для GC. Но даже с кучей нескольких ГБ вы должны видеть, что полные циклы GC занимают около 2-3 секунд. Вы видите такие «дроссели» или ваши дроссели намного дольше?

В общем, это терпимо, чтобы иметь GC времени < 5% общего времени выполнения прикладной программы.

Кроме того, трудно обвинить GC, было бы полезно, если бы вы могли показать нам некоторые журналы GC.

+0

Спасибо за все ответы. Я посмотрю, смогу ли я получить журналы gc. –

2

Если вам это не нужно, закройте его. Да, вы правильно даете слишком много кучи пространства для Java-программы, «может» заставить потоки коллектора мусора работать в течение более длительного периода времени. Что «слишком много» зависит от требований вашей программы. У меня нет жестких данных, чтобы поддержать это, я видел, как это происходило на серверных серверах на уровне производства в прошлом. Java 1.7 (последняя версия) может не представлять те же проблемы, что и Java 1.4.

Смежные вопросы