Самая большая куча используется в управляемой среде? (.Net / Java) - PullRequest
2 голосов
/ 09 октября 2008

Какую самую большую кучу вы лично использовали в управляемой среде, такой как Java или .NET? С какими проблемами производительности вы столкнулись, и в конечном итоге вы получали убывающую отдачу, чем больше была куча?

Ответы [ 5 ]

2 голосов
/ 09 октября 2008

Я работаю в 64-битной системе .Net, которая обычно использует 9-12 ГБ, а иногда и 20 ГБ. Я не видел никаких проблем с производительностью даже во время сбора мусора, и я искал усердно, потому что не ожидал, что он будет работать так хорошо.

Более ранняя версия слишком долго висела на некоторых объектах, что приводило к случайным сборкам мусора, которые высвобождали 3 ГБ +. Даже тогда заметного влияния на производительность не было. Система работает на 16-ядерном сервере с 32 ГБ ОЗУ, что, вероятно, помогает ...

1 голос
/ 09 октября 2008

В настоящее время у меня есть производственное приложение с 6 ГБ памяти. Вам также понадобится 64-битная система, чтобы JVM могла решать такие проблемы. Сборщик мусора - это действительно единственное (что я нашел до сих пор), где производительность падает с размером, и только тогда, когда вы вручную запускаете System.GC, что заставляет JVM приводить все к полной остановке при прохождении 6 ГБ объектов стоимостью. Занимает и хорошие 20 секунд. Поведение GC по умолчанию не делает этого, кстати, вы должны быть достаточно тупыми, чтобы сделать это. Также стоит изучить тюнинг JVM в этом размере.

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

1 голос
/ 09 октября 2008

В .Net, в 32-битной Windows, вы можете реально использовать только около 1,4 ГБ памяти, прежде чем все станет по-настоящему шатким (из-за исключений памяти). Это связано с ограничением в 32-битных окнах, которое ограничивает один процесс использованием более 2 ГБ ОЗУ. Есть ключ / 3GB, который вы можете вставить в свой boot.ini, но это только продвинет вас немного дальше. Если вы хотите использовать много памяти, вам следует серьезно подумать о работе в 64-битной версии Windows.

0 голосов
/ 09 октября 2008

Я использовал от 2 ГБ до 5 ГБ памяти в Java, но обычно, когда я получаю более 2 ГБ, я действительно начинаю думать об оптимизации памяти. Уменьшение отдачи может варьироваться от неоптимизации, когда это необходимо, поскольку у вас много памяти, до нехватки памяти для кэшей ОС / диска (что может помочь вашему приложению в целом).

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

0 голосов
/ 09 октября 2008

Я не уверен, что вы подразумеваете под кучей, но если вы имеете в виду используемую память, я использовал совсем немного, 2GB +. У меня есть веб-приложение, которое выполняет обработку изображений, и для анализа требуется загрузка 2 больших файлов сканирования в память.

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

Например, для настройки файлов для первоначального просмотра потребуется около 5 секунд. Простой анализ и масштабирование будут достаточно быстрыми раз в памяти, порядка от 0,1 до 0,5 секунд.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...