Als allererstes müssen Sie sicherstellen, dass Ihre Objekte garbage collectable sind. Aber das ist nur der erste Schritt.
Zweitens kann es sein, dass der von der JVM verwendete Speicher gar nicht an das Betriebssystem zurückgegeben wird.
Zum Beispiel. Nehmen wir an, Sie haben 100 MB Java-Objekte, dann ist Ihre VM ca. 100 MB groß. Nach der Garbage Collection können Sie die Heap-Nutzung auf 10 MB reduzieren, aber die VM wird in etwa bei 100 MB bleiben. Diese Strategie wird angewandt, damit die VM Speicher für neue Objekte zur Verfügung hat.
Damit die Anwendung "physischen" Speicher an das System zurückgeben kann, müssen Sie prüfen, ob Ihre VM dies unterstützt.
Es gibt zusätzliche VM-Optionen que Mai ermöglichen es Ihrer Anwendung, mehr Speicher an das Betriebssystem zurückzugeben:
-XX:MaxHeapFreeRatio=70 Maximaler Prozentsatz des freien Heaps nach der GC, um ein Schrumpfen zu vermeiden.
-XX:MinHeapFreeRatio=40 Minimaler Prozentsatz des nach der GC freien Heaps, um eine Expansion zu vermeiden.
Nach meiner Interpretation dieser Optionen wird sich der VM drücken, wenn er unter 70 % fällt. Aber ehrlich gesagt weiß ich nicht, ob nur der Heap schrumpfen wird y an das Betriebssystem zurückgegeben werden oder nur schrumpfen innerhalb die VM.
Eine vollständige Beschreibung der Speicherverwaltung im laufenden Betrieb finden Sie hier:
Beschreibung von HotSpot GCs: Speicherverwaltung in der Java HotSpot Virtual Machine White Paper: https://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf
Und bitte, bitte. Probieren Sie es aus, messen Sie und lassen Sie uns wissen, ob sich der Speicherverbrauch dadurch tatsächlich verringert.