Ich werde in Kürze versuchen, das Problem zu erklären. Ich arbeite in der Lieferkette Domain, wo wir mit Artikeln/Produkten und SKUs beschäftigen.Schlechte Leistung durch Java Garbage Collector? Brauchen Sie Vorschläge
Angenommen, mein gesamtes Problem ist 1 Million SKUs und ich führe einen Algorithmus. Jetzt wird meine JVM-Heap-Größe als 4 GB angegeben.
Ich kann nicht alle SKUs auf einmal verarbeiten, da ich viel mehr Speicher brauche. Also, ich teile das Problem in kleinere Mengen aufgeteilt. Jede Charge enthält alle zugehörigen SKUs, die zusammen verarbeitet werden müssen.
Jetzt führe ich mehrere Iterationen durch, um den gesamten Datensatz zu verarbeiten. Sagen wir, wenn jede Charge ca. 5000 SKUs, ich werde 200 Iterationen/Schleifen haben. Alle Daten für die 5000 SKUs sind erforderlich, bis die Charge die Verarbeitung abgeschlossen hat. Wenn jedoch der nächste Stapel gestartet wird, sind die vorherigen Stapeldaten nicht erforderlich und können daher als Müll gesammelt werden.
Dies ist das Problem Hintergrund. Kommen wir jetzt zu dem speziellen Leistungsproblem aufgrund von GC - . Jede Charge dauert etwa 2-3 Sekunden, um fertig zu werden. Jetzt, innerhalb dieser Zeit, kann GC keine Objekte mehr freigeben, da alle Daten bis zum Ende der Verarbeitung eines bestimmten Stapels benötigt werden. So verschiebt GC alle diese Objekte auf alte Gen (Wenn ich auf Ihrenkit Profiler schaue, dann gibt es kaum etwas in der neuen Generation). Also, altes Gen wächst schneller und es wird ein vollständiger GC benötigt, was mein Programm sehr langsam macht. Gibt es eine Möglichkeit, den GC in einem solchen Fall zu tunen, oder kann ich meinen Code ändern, um die Speicherzuweisung auf andere Weise vorzunehmen?
PS - wenn jede Charge sehr klein ist, sehe ich dieses Problem nicht. Ich glaube, das liegt daran, dass der GC in der Lage ist, Objekte schnell genug freizugeben, da der Stapel schneller abgeschlossen wird und somit Objekte in der alten Generation nicht verschoben werden müssen.
Hat der ** Profiler ** Ihnen gesagt, dass es mehr als 10% der Zeit in Anspruch nimmt, Müll zu sammeln? Oder ist es eine Vermutung? – RobAu
Ändern Sie die Tenuring-Schwelle. Wie hängt es von Ihrem GC ab - welchen GC verwenden Sie? –
Wie lange dauert der vollständige GC? –