Speicher wird nicht freigegeben, in matlab?
Bin ich mit einem Skript, das belebt eine plot (simulation von Wasser-Strömung). Nach einer Weile, kill ich die Schleife mache Strg-c.
Nachdem ich dies mehrere Male, bekomme ich die Fehlermeldung:
??? Error: Out of memory.
Und nach habe ich erhalten, dass Fehler, die bei jedem Anruf auf mein Skript wird generiert.
Nun, es passiert, bevor Sie irgendwas in die Funktion, dass ich den Aufruf ausgeführt wird, ich.e auch wenn ich die Zeile hinzufügen a=1
als erste Zeile der Funktion bin ich aufrufen, ich bekomme immer noch die Fehlermeldung und kein Ausdruck, so wird der code innerhalb der Funktion gar nicht ausgeführt.
Was könnte die Ursache sein?
- Bitte geben Sie einige code, und sagen Sie uns, was Matlab-interpreter (einschließlich version), die Sie verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere mögliche Gründe.
Wahrscheinlich das Skript erstellt einige Variablen, füllen sich die Speicher. Führen Sie
vor dem Neustart das Skript, so dass alle Variablen gelöscht, oder ändern Sie Ihr Skript, um eine Funktion (die wird automatisch löschen Sie alle temporären Variablen, nachdem die Funktion). Beachten Sie, dass diese löscht auch alle geladenen Funktionen, so dass Sie Ihren nächsten Ausführung des Skripts geladen werden Sie wieder langsamer wird die nächste Ausführung, die von einer (meist kleinen) bit. Es kann ausreichend sein, rufen Sie
clear
nur.Vielleicht sind Sie animieren durch Plotten mehrere plots übereinander (ohne clearing-Achsen ersten). So kann man z.B. ausführen von Java heap space. Sie können schließen Sie die offene Figuren einzeln, oder führen Sie
Können Sie erhöhen auch die Menge an Java-Speicher von Matlab verwendet, die auf Ihrem system (siehe Anleitung hier) - beachten Sie, dass der Grenzwert in der Regel eher gering, ärgerlich also, wenn Sie wollen, um Tonnen von zahlen.
Besonders wenn Sie mit einer älteren Windows-version erhalten, können Sie Ihren Speicher fragmentiert. Matlab braucht zusammenhängende Blöcke des freien Speicherplatzes zuordnen der Variablen. Überprüfen der Fragmentierung des Speichers führen
und Blick auf die Zahl für die maximal mögliche variable Größe. Wenn dieser viel kleiner ist als die Größe, die verfügbar ist für alle arrays, ist es Zeit, starten Sie Matlab (ich denke, wenn Sie eine Windows-version, die würde erfordern einen Neustart, um das problem zu beheben, können Sie sich möglicherweise in einen neuen computer mit Win7).
clear all
sinkt code Leistung und ist in der Regel unnötig".clear
von selbst entfernt alle Variablen aus dem workspace.clear all
löscht auch Funktionen geladen, die musst du dann wieder zu laden. Verwenden Sie nichtclear all
!clear
nur. Für die meisten praktischen Zwecke, die performance-Einbußen sind gering, obwohl.clear all
close all
sind straight-forward-Möglichkeiten, um den freien Speicher, die bekannt sind, von allen nicht-Anfänger.Das Hauptproblem ist, dass, wenn Sie getan haben einige Daten-großen Daten-Verarbeitung und gelöscht/geschlossen, alles dran - es gibt noch erhebliche Speicher verwendet die von matlab.
Dies ist ein derzeit großes problem mit matlab, und meines Wissens gibt es keine Lösung, anstatt Neustart von matlab, das ist schade.
Können Sie auch versuchen, die
pack
Befehl, zB:auf Speicher löschen. Obwohl nach einer aktuellen mathworks seminar fragte ich einen der mathworks-guru ist und er auch entsprach @Andrew Janke Kommentar zur Fragmentierung des Speichers. In der Regel beenden und Neustarten von matlab sortiert diese aus für mich (auf XP).
pack
ist das äquivalent vonsave; clear; load
. Deshalb ist es nutzlos, nach einemclear all
.Es klingt wie Sie nicht beseitigen Sie alle Ihre Variablen. Sie sollten entweder einen Weg, um die Schleife zu stoppen, ohne Eingabe von ctrl-c (schreiben Sie ein einfaches GUI mit einem "Stop" - Taste und Anzeige) und dann säubern Sie Ihren Arbeitsbereich in das Skript oder deaktivieren Sie die Variablen am Anfang des Scriptes.
Sind Sie absichtlich die Speicherung alle Daten (oder einen großen Anteil) in jeder iteration der Schleife?