Ich habe zwei sehr große Listen von String, eine mit einigen IDs (über 70k) und eine andere Liste mit einigen String-Nachrichten, wobei jede Zeile eine ID enthält (über 400k Einträge). Ich brauche, dass für jede ID aus der ersten Liste, um alle Nachrichten mit der gleichen ID aus der zweiten Liste zu erhalten. Ich habe versucht, einige Threads zu erstellen, die für jede ID aus der ersten Liste die gesamte zweite Liste iterieren und die Nachricht abrufen und entfernen. Dies scheint zu viele Iterator-Objekte zu erzeugen, was zu OOM führt, wenn nicht genügend Speicher vorhanden ist. Außerdem ist die CPU bei der Iteration der zweiten Liste zu 100% ausgelastet. Irgendwelche Vorschläge? Ich kann die Implementierung ändern, auch die Container, wo ich die Nachrichten halten.
Gracias.
while (condition) {
<Message> iterator = msgQueue.iterator();
while (iterator.hasNext()) {
Message message = iterator.next();
if (filter.filter(message)) {
iterator.remove();
}
}
}