У меня есть два очень огромных списка строк, один из которых содержит несколько идентификаторов (более 70 КБ), а другой - несколько сообщений String, каждая строка содержит идентификатор (более 400 000 записей). Мне нужно, чтобы для каждого идентификатора из первого списка были получены все сообщения с одинаковым идентификатором из второго списка. Я попытался создать несколько потоков, которые для каждого идентификатора из первого списка повторяют весь второй список и извлекают и удаляют сообщение. Похоже, это создает слишком много объектов Iterator, в результате чего OOM выделяется недостаточно памяти. Кроме того, загрузка процессора составляет 100% при повторении второго списка. Какие-либо предложения? Я могу изменить реализацию, также контейнеры, в которых я храню сообщения.
Спасибо.
while (condition) {
<Message> iterator = msgQueue.iterator();
while (iterator.hasNext()) {
Message message = iterator.next();
if (filter.filter(message)) {
iterator.remove();
}
}
}