MATLAB Java Referenzierung Problem
-
05-07-2019 - |
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?
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