Erzwingen Sie die vollständige Speicherbereinigung, wenn die Speicherbelegung einen bestimmten Schwellenwert überschreitet

Ich habe eine Serveranwendung, die in seltenen Fällen große Speicherbereiche zuweisen kann.

Es ist kein Speicherleck, wieDiese Chunks können vom Garbage Collector zurückgefordert werden, indem eine vollständige Garbage Collection ausgeführt wird. Bei der normalen Garbage Collection wird zu wenig Arbeitsspeicher freigegeben. Dies ist in diesem Zusammenhang nicht ausreichend.

Der Garbage Collector führt diese vollständigen GCs aus, wenn dies für angemessen erachtet wird, und zwar, wenn sich der Speicherbedarf der Anwendung dem mit -Xmx angegebenen zugewiesenen Maximum nähert.

Das wäre in Ordnung, wenn es das nicht gäbeDiese problematischen Speicherzuordnungen treten in Bursts auf, und kann OutOfMemoryErrors verursachen, daDer JVM ist nicht in der Lage, einen GC schnell genug durchzuführen, um den erforderlichen Speicher freizugeben. Wenn ich vorher manuell System.gc () aufrufe, kann ich diese Situation verhindern.

Wie auch immer, ich würde es vorziehen, die Speicherzuordnung meines JVM nicht selbst überwachen zu müssen (oder Speicherverwaltung in die Logik meiner Anwendung einzufügen). Es wäre schön, wenn es eine Möglichkeit gäbe, die virtuelle Maschine mit einer Speicherschwelle auszuführen, über die vollständige GCs automatisch ausgeführt werden, um den benötigten Speicher sehr früh freizugeben.

Um es kurz zu machen: Ich brauche eine Möglichkeit (eine Befehlszeilenoption?), Um die JVM zu konfigurieren, damit eine gute Menge an Speicher vorzeitig freigegeben wird (dh eine vollständige GC wird durchgeführt), wenn die Speicherbelegung einen bestimmten Schwellenwert erreicht. Es ist mir egal, ob Das verlangsamt meine Bewerbung von Zeit zu Zeit.

Alles, was ich bis jetzt gefunden habe, sind Möglichkeiten, die Größe der Generationen zu ändern, aber das ist nicht das, was ich brauche (zumindest nicht direkt).

Ich würde mich über Ihre Vorschläge freuen.

Silvio

P.S. Ich arbeite daran, große Zuweisungen zu vermeiden, aber es kann lange dauern, und meine App benötigt inzwischen etwas Stabilität

AKTUALISIEREN: Analyse der App mit jvisualvm, kann ich sehen, dass das Problem in der alten Generation liegt

Antworten auf die Frage(7)

Ihre Antwort auf die Frage