Ich bemerke ein seltsames Phänomen in meiner Anwendung. Ich speichere Objekte in einer Hashmap, nachdem ich sie an einen Server gesendet habe, und entferne sie, wenn die Antwort eintrifft.Java Garbage Collection Induzierte Latenz beeinträchtigt die Leistung
Ich bemerkte vor kurzem sehr langsam nach dem Laufen. Beim Überprüfen stellte ich fest, dass die Speicherbelegung bei 4 GB bleibt und dann auf weniger als 1 GB fällt. Ich vermute, dass es viele Objekte reinigt, weshalb die Performance so schlecht wird.
Also die Frage ist, warum es für Java zu Garbage Collect so spät dauert? Warten Sie also, bis der Heap voll ist, und führen Sie dann Garbage Collection durch. Sollte es nicht den Müll in regelmäßigen Abständen sammeln.
Die Objekte, die in der HashMap gespeichert werden, werden genau zu diesem Zeitpunkt erstellt, dh sie sind nicht langlebig.
Dies ist auf Linux (RHEL), Oracle JVM HotSpot 7. 64-Bit. 4 Kerne. Dies ist, wie die App ausgeführt wird:
java -jar -Xmx4g prog.jar
Anmerkung: Ich habe gesehen: Tuning garbage collections for low latency Aber jetzt möchte ich verstehen, warum der GC so lange dauert zu treten?
Welche Flaggen sind Sie laufen das Programm mit? – FDinoff
GC startet normalerweise erst, wenn der Heap fast voll ist. Die genauen Trigger variieren je nach JVM-Version und Einstellungen, aber insgesamt ist es in der Regel effizienter, einen großen GC selten gegen viele kleinere zu machen. Wie Sie jedoch festgestellt haben, ist dies nicht ideal für die Latenz. Wenn Sie eine minimale Latenzzeit wünschen, müssen Sie sie einstellen. (Oder finden Sie eine der wenigen verfügbaren GC-Implementierungen.) –
@FDinoff keine anderen Flags als Standardwerte. im Grunde, java -jar prog.jar. –