3 Stimmen

Java: Speicher auf die Festplatte auslagern

Nehmen wir an, ich habe eine Java-Anwendung, die ungefähr Folgendes tut:

  1. Initialisieren (dauert sehr lange, weil es kompliziert ist)
  2. Schnell ein paar Dinge erledigen
  3. Lange Zeit untätig warten (hier Ihr Lieblingsmechanismus)
  4. Gehen Sie zu Schritt 2.

Gibt es eine Möglichkeit, die JVM zu ermutigen oder zu zwingen, ihren Speicher während langer Leerlaufzeiten auf die Festplatte zu leeren? (z.B. am Ende von Schritt 2 einen Funktionsaufruf machen, der effektiv sagt "HEY JVM! Ich gehe jetzt für eine Weile schlafen.")

Es macht mir nichts aus, einen großen Teil des virtuellen Speichers zu verwenden, aber der physische Speicher ist auf dem Rechner, den ich verwende, sehr knapp, weil es viele Hintergrundprozesse gibt.

0voto

Benj Punkte 30394

Sind die Auslagerungsdateien nicht genau dafür gedacht? Wenn Ihre JVM für längere Zeit im Leerlauf ist und nicht auf ihre Speicherseiten zugreift. Es wird sehr wahrscheinlich ausgelagert werden und somit nicht viel tatsächlichen RAM verwenden.

Eine Sache, die Sie jedoch tun könnten... Die meisten Daemon-Programme haben eine Startphase (in der sie Dateien parsen und Datenstrukturen erstellen usw.) und eine laufende Phase, in der sie die beim Start erstellten Objekte verwenden. Wenn es der JVM erlaubt ist, startet sie in der zweiten Phase, ohne eine Garbage Collection durchzuführen, was dazu führen kann, dass die Größe des Prozesses ansteigt und dann für die gesamte Lebensdauer des Prozesses so groß bleibt (da GC die tatsächliche Größe des Prozesses nie/kaum reduziert).

Wenn Sie sicherstellen, dass der gesamte Speicher, der in jeder einzelnen Phase des Programms zugewiesen wird, GC-fähig ist, bevor die nächste Phase beginnt, können Sie die Einstellung -Xmx verwenden, um die maximale Größe des Prozesses zu erzwingen und Ihr Programm zu veranlassen, zwischen den Phasen ständig GC durchzuführen. Ich habe das schon einmal mit einigem Erfolg gemacht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X