2017-01-05 4 views
0

Wir haben ein JavaFX-Programm, das Videodateien abspielt. Das Problem, das wir haben, ist, dass wenn die Videodatei in den Speicher geladen und abgespielt wird, sie nicht entladen wird, wenn die nächste Videodatei abgespielt wird. Das Problem ist dann, dass nach einer bestimmten Anzahl von Videos der Speicher voll ist und die Maschine aus vollem Speicher schreit.Java - entladen Sie Medien aus dem Speicher

Wir haben versucht, eine 64-Bit-Version des Programms zu erstellen, aber ohne irgendeinen Vorteil dabei zu haben.

+2

Wir können Ihnen nicht helfen, den Fehler zu finden, wenn Sie uns den Code nicht zeigen. –

Antwort

1

Java verwendet standardmäßig einen Garbage-Collector vom Typ Mark-Sweep, nicht einen Garbage-Collector für Referenzzähler. Das heißt, wenn Sie alle Ihre Verweise auf das alte Video löschen, wird das Video nicht aus dem Speicher entladen. Stattdessen wartet die Java-Laufzeitumgebung, bis das Programm eine bestimmte Speichermenge verwendet hat, bevor der Garbage Collector aufgerufen wird. Diese Parameter werden in der Java-Befehlszeile festgelegt oder standardmäßig pro Plattform festgelegt. Es sieht so aus, als ob Ihre Java-Speicherbereinigungsparameter zu hoch eingestellt sind und Java deshalb keine Speicherbereinigung vornimmt, bevor der gesamte Speicher auf Ihrem Computer belegt ist.

Um die maximale Speichermenge einstellen, bevor das folgende in der Umgebungsvariable JAVA_OPTS hinzufügen Ihr Programm ausgeführt wird:

-verbose:gc -Xmx1200m 

Die erste wird Ihnen sagen, was mit dem Garbage Collector vor sich geht, die zweite legt die maximale Speichermenge fest, die Java verwenden soll, in diesem Fall 1,2 Gigabyte. Stellen Sie einen Teil des Gesamtspeichers Ihres Computers ein, aber ausreichend groß, damit Sie Ihre Videos in den Speicher laden können.

Sie möchten vielleicht auch

-XX:+UseG1GC 

hinzuzufügen, um die Garbage Collection Verzögerungen gering zu halten. Dies opfert ein gewisses Maß an ultimativer Leistung, um Verzögerungen von 10 Sekunden für die Müllsammlung von Zeit zu Zeit zu verhindern. Die Maschinen von heute sind so schnell und ihre Erinnerungen so groß, dass Sie bei interaktiven Programmen Verzögerungen bei der Garbage-Collection bemerken, die weit über die von G1GC verursachten Verzögerungen hinausgehen.

Sie möchten auch sicherstellen, dass Sie alle Verweise auf das alte Video löschen, sobald das neue Video geladen ist. Andernfalls, wenn es eine zugängliche Referenz hat, wird es nicht durch den Garbage Collector entladen.

+0

Danke schön !!!! – technotommy

Verwandte Themen