Какая очередь блокировки Java лучше всего подходит для нескольких сценариев производителя и одного или нескольких потребителей?Какая очередь блокировки Java лучше всего подходит для нескольких сценариев производителя и одного или нескольких потребителей?
Я тестирую с LinkedBlockingQueue, но получаю исключение OutOfMemoryError.
Я пытаюсь добиться следующих целей.
- производитель создает объект & ставит в очередь.
- потребитель захватывает данные из очереди & вставляется в базу данных. Было бы 400 производителей, и я могу настроить потребителей по своему желанию.
Дай мне знать какие-либо идеи.
Update
Производитель: Он должен слушать сокет-сервер. Он считывает данные из сокета &, создавая объект (объекты домена) и помещая его в очередь.
Потребитель: Возьмите объект из очереди & вставки в БД (Hiberante & пула соединений поддерживается)
Это мое реальное окружение. Процесс должен иметь возможность обрабатывать не менее 200 записей/сек. Я тестирую масштабируемость процесса и способы его улучшения. Надеюсь, это даст лучшую идею.
Полезные ссылки:
Monitoring and Managing Java SE 6 Platform Applications
+1 Я согласен, кажется, что ваша очередь не имеет разумной емкости - по умолчанию Integer.MAX_VALUE, который довольно большой. Если вы настроили емкость на что-то разумное и все еще имеете проблемы, то проверьте настройки Java-heapsize -Xmx и т. Д. – pjp
Спасибо, ребята, я не могу уменьшить размер производителей в реальном времени, поэтому мне нужно его обработать. Если я использую предложение, я теряю этот объект, не так ли? Я использую put() и take(). который будет ждать в зависимости от состояния очереди. Я сконфигурировал -vmargs как -Xms512m -Xmx1024m в конфигурации запуска eclipse. – nayakam