Problème de référencement Java MATLAB
-
05-07-2019 - |
Question
J'ai une classe MATLAB qui contient une référence à un objet java
classdef MyClass
properties
j = myJavaClass
end
methods
...
end
end
et après l’utiliser (en utilisant clear, scope exit ou explicitement myClass = 0;), l’objet Java est toujours actif, même après avoir appelé Runtime.gc.
Je vois dans le vidage que l'objet est toujours dans le segment de mémoire de la machine virtuelle Java pour le processus MATLAB (à l'aide de jmap -histo pID) et je suppose donc que MATLAB lui-même fait toujours référence à l'objet - malgré l'appel à clear, clear JAVA, classes claires , etc. - rien n’aide
Des idées?
La solution 2
La solution de contournement suggérée par gnovice semble fonctionner - en ajoutant au destructeur la ligne
function delete( obj )
...
jObject = 0;
end
L'objet n'est pas présent dans la pile JVM de MATLAB.
Cela ressemble à un bogue dans MATLAB qui provoque le référencement des objets JAVA dans les classes MCOS non référencées.
Autres conseils
Le dernier format de programmation orienté objet de MATLAB est encore quelque chose que je n’ai pas encore abordé avec les deux pieds, mais je peux essayer de vous donner quelques idées ...
Je suppose que vous créez une "classe de valeur". par opposition à une "classe de traitement" (Vous pouvez en savoir plus sur ces ici ). Lorsque des copies de classes de valeur sont créées, tout le contenu est copié. Si vous avez une copie errante de l’objet flottant quelque part, il existe toujours un descripteur pour l’objet Java.
Si vous deviez plutôt créer votre classe à partir de la classe handle, vous pouvez explicitement détruire l'objet Java dans le destructeur de classe (c'est-à-dire la méthode DELETE surchargée).
Juste quelques idées aléatoires. J'espère qu'ils vous seront utiles.
Je ne sais pas si cela résoudra le problème, mais essayez de faire l'affectation dans le constructeur, pas dans le bloc de propriétés. En outre, il pourrait être utile de mentionner la version exacte de Matlab que vous utilisez.
Essayez d’examiner l’aspect onCleanup de la POO. Je pense que Loren a publié un blog à ce sujet il y a environ 3 mois.
HTH. Dan