Meine Java-App unterhält einen internen Cache, der bis zu 10 Gigs wachsen konnte. Ablaufrichtlinie ist auf 30 Minuten festgelegt oder wenn Speicherschwelle erreicht ist (ich verwende lokalen ehcache). Es ist offensichtlich, dass nach 30 Minuten alle zwischengespeicherten Objekte in dem alten Gen sind und es einen vollständigen GC erfordern wird, um sie zu sammeln. Momentan könnte die Stop-World Pause 6 Sekunden erreichen und ich möchte sie reduzieren.Wie Java gc für langlebige Objekte zu optimieren
Durchschnittliche Objektgröße ist 500k, könnte aber bis zu 1 Megabyte gehen, also sprechen wir über 10000-20000 zwischengespeicherte Objekte (tatsächlich Byte-Arrays).
Was ist die beste Strategie für die GC-Optimierung? Ich weiß, dass ich mich aus dem Staub machen kann, aber es ist eine Art letzte Lösung.
Vielen Dank!
Schreiben Sie Ihren eigenen Cache-Code gegen ein schwaches referenzbasiertes Schema. –
Was meinst du? Wenn es in Heap lebt, unterliegt es immer noch einem Full GC. – Alex
Hängt davon ab, was genau du tust. Sie können die Hauptstruktur wiederverwenden und sogar Bytearrays wiederverwenden, anstatt neue zu erstellen. –