Frage

Ich habe eine MATLAB-Klasse, die einen Verweis auf ein Java-Objekt enthält

classdef MyClass
  properties
    j = myJavaClass
  end
  methods
...
  end
end

und nachdem ich es verwenden (mit klarem, Ausgang Umfang oder explizit Einstellung myClass = 0;). Das Java-Objekt ist noch am Leben - auch nach dem Aufruf Runtime.gc

Ich sehe in der Deponie, die das Objekt für den MATLAB-Prozess noch in dem JVM-Heap ist (mit jmap -histo pID) und damit gehe ich davon aus MATLAB selbst noch das Objekt verweist - trotz Aufruf zu löschen, klar JAVA, klare Klassen etc. - nichts hilft

Irgendwelche Ideen?

War es hilfreich?

Lösung 2

Die Abhilfe gnovice vorgeschlagen zu funktionieren scheint - zur Ergänzung des destructor der Zeile

function delete( obj )
  ...
  jObject = 0;
end

verursachte das Objekt in MATLAB JVM-Heap nicht zu sein.


Es sieht wie ein Fehler in MATLAB, die die Referenzierung der Java-Objekte in unreferenced MCOS Klassen verursacht.

Andere Tipps

Das neueste objektorientierte Programmierformat für MATLAB ist noch etwas, das ich noch mit beiden Füßen nicht sprang in, aber ich kann Ihnen ein paar Ideen versuchen und geben ...

Ich vermute, Sie eine „Wert-Klasse“ schaffen, wie auf eine „Handle-Klasse“ im Gegensatz (Sie können mehr über diese Besuche hier ). Wenn Kopien von Wertklassen vorgenommen werden, alle Inhalte kopiert werden. Wenn Sie eine fehlerhafte Kopie des Objekts haben irgendwo schwimmen, dann gibt es immer noch ein Handle auf das Java-Objekt in der Existenz.

Wenn Sie Ihre Klasse zu bauen sind, anstatt aus der Griff Klasse, können Sie explizit das Java-Objekt innerhalb der Klasse destructor zerstören (das heißt die überladene Methode DELETE).

Nur ein paar zufällige Ideen. Ich hoffe, sie sind hilfreich.

Ich bin mir nicht sicher, ob dies das Problem beheben wird, sondern versucht, die Zuordnung im Konstruktor zu machen, nicht in den Eigenschaften blockieren. Auch könnte es hilfreich sein, die genaue Matlab Version zu erwähnen, die Sie verwenden.

Versuchen Sie einen Blick auf die onCleanup Aspekt der OOP nehmen. Ich denke, dass Loren vor einem Blog auf es etwa 3 Monate.

HTH. Dan

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top