2015-06-14 1 views
0

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

В общем, лучше выделить один кусок памяти с помощью глобальной ссылки и повторно использовать его для каждого сообщения, которое я прочитал или выделил локальному объекту другой кусок памяти для каждого сообщения (таким образом, это может быть связано с увеличением размера не являются глобальной ссылкой)?

Кроме того, есть ли какая-то ссылка где-то, в которой есть список хороших практик/дизайна Java-программирования, которые могут охватывать эту и другие необходимые методы для создания кода Java? Я давно кодирую Java, но не уверен, что все мои приемы являются самыми желанными.

+1

использовать местные, недолговечные объекты. объекты, которые «умирают молодыми», хороши для GC. – ZhongYu

+0

У меня много сообщений. Я разбираюсь в том, как получается сборщик мусора против повторного использования буфера – user3470688

+1

, вам нужно профайлеровать свое приложение с помощью разных стратегий. Я сомневаюсь, что вы все равно найдете большую разницу в производительности. – ZhongYu

ответ

0

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

0

Скажем, что с помощью примера вам нужно обработать 1 000 000 строк того же типа и количества объектов. В этом случае вместо создания и удаления этих объектов значений, а также создания и удаления объекта Row, тогда в этом случае вы хотели бы создать его один раз в начале, использовать сеттеры для изменения для каждой итерации, а gc только в самом конце только один раз. В этом случае вы хотите сохранить кеш в одну строку. Это то, что делает ResultSet.

1

Я бы порекомендовал вас посмотреть в Creational Patterns в целом. Это должно дать вам хорошую платформу для начала.

Пять известных шаблонов проектирования, которые являются частями порождающих паттернов являются

  1. Аннотация завод шаблон, который предоставляет интерфейс для создания связанных или зависимых объектов без указания конкретных классов объектов.
  2. Builder шаблон, который отделяет построение сложного объекта от его представления, так что тот же процесс построения может создавать различные представления.
  3. Factory method pattern, позволяющий классу отложить создание экземпляров подклассов. = 4. Шаблон Prototype, который определяет тип объекта, который создается с использованием прототипа, и создает новые объекты путем клонирования этого прототипа.
  4. Шаблон Singleton, который гарантирует, что класс имеет только один экземпляр и предоставляет глобальную точку доступа к нему.

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

Отдельно и намного дальше, чем просто лучше управлять жизненными циклами объектов. Существуют библиотеки, такие как OpenHFT (High Frequency Trading), которые даже позволят вам IPC в сегмент общей памяти. No, это не то, что вы хотите, и я предполагаю, что вы не считаете микросекунды. Но я думаю, что это иллюстрирует, что выход из GC не такой надуманный, как описано.

Но если бы я был вами, я бы экспериментировал с подходящим шаблоном создания, чтобы лучше управлять объектами Object Lifecycles.

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