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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top