Speicher nicht in Matlab freigegeben?

8

Ich führe ein Skript, das eine Handlung animiert (Simulation eines Wasserflusses). Nach einer Weile töt ich die Schleife mit ctrl-c. Nachdem ich das mehrmals gemacht habe, bekomme ich den Fehler:

%Vor%

Und nachdem ich diesen Fehler erhalten habe, wird jeder Aufruf meines Skripts diesen erzeugen.
Nun passiert es, bevor irgendwas in der Funktion, die ich anrufe, ausgeführt wird, dh selbst wenn ich die Zeile a=1 als erste Zeile der aufgerufenen Funktion hinzufüge, bekomme ich immer noch den Fehler und keinen Ausdruck, also den Code drin Die Funktion wird nicht einmal ausgeführt. Was könnte das verursachen?

    
olamundo 22.03.2010, 23:55
quelle

4 Antworten

8

Es gibt mehrere mögliche Gründe.

  1. Wahrscheinlich erstellt Ihr Skript einige Variablen, die den Speicher füllen. Führen Sie

    aus %Vor%

    vor dem Neustart des Skripts, so dass alle Variablen gelöscht werden, oder ändern Sie Ihr Skript in eine Funktion (die alle temporären Variablen automatisch nach der Rückkehr der Funktion löscht).

  2. Vielleicht animieren Sie mehrere Plots übereinander (ohne vorher die Achsen zu löschen). Daher haben Sie möglicherweise keinen Java-Heapspeicher mehr. Sie können die geöffneten Figuren einzeln schließen oder

    ausführen %Vor%

    Sie können auch die Menge an Java-Speicher erhöhen, die Matlab auf Ihrem System verwendet ( Siehe Anleitung hier ) - beachte, dass das Limit generell eher gering ist, ärgerlich also wenn man tonnenweise Zahlen will.

  3. Besonders wenn Sie eine ältere Version von Windows ausführen, können Sie Ihren Speicher fragmentieren. Matlab benötigt zusammenhängende Blöcke mit freiem Speicherplatz zum Zuweisen von Variablen. Um nach Speicherfragmentierung zu suchen, führen Sie

    aus %Vor%

    und sehen Sie sich die Nummer für die maximal mögliche Größe an. Wenn dies viel kleiner als die für alle Arrays verfügbare Größe ist, ist es Zeit, Matlab neu zu starten (ich denke, wenn Sie eine Windows-Version verwenden, die einen Neustart erfordern würde, um das Problem zu beheben, sollten Sie einen neuen Computer mit Win7 suchen) .

Jonas 23.03.2010, 01:11
quelle
4

clear all close all sind direkte Wege, um Speicher freizugeben, die allen Nicht-Anfängern bekannt sind.

Das Hauptproblem ist, dass, wenn Sie einige Daten große Datenverarbeitung getan haben, und löschte / schloss alles ab - es gibt immer noch erhebliche Speicher von Matlab verwendet.

Dies ist ein momentan großes Problem mit Matlab, und meines Wissens gibt es keine Lösung, statt Matlab neu zu starten , was sehr schade ist.

    
S C 13.08.2012 04:39
quelle
3

Sie können auch den Befehl pack ausprobieren, zB:

%Vor%

um Speicher zu löschen. Obwohl ich nach einem kürzlichen MathWorks-Seminar einen MathWorks-Guru gefragt habe, hat er auch den Kommentar von Andrew Janke zur Speicherfragmentierung übernommen. In der Regel beendet das Beenden und Neustarten von Matlab dies für mich (auf XP).

    
mor22 25.11.2010 13:44
quelle
2

Es klingt, als würden Sie keine Ihrer Variablen löschen. Sie sollten entweder eine Möglichkeit bieten, die Schleife zu stoppen, ohne ctrl-c zu drücken (schreiben Sie eine einfache GUI mit einer "Stop" -Schaltfläche und Ihrer Anzeige) und dann Ihren Arbeitsbereich im Skript aufräumen oder Ihre Variablen am Anfang des Skripts löschen.

Speichern Sie absichtlich alle Daten (oder eine große Komponente) bei jeder Iteration Ihrer Schleife?

    
dwj 23.03.2010 00:06
quelle

Tags und Links