Pergunta

Eu tenho uma classe MATLAB que contém uma referência a um objeto java

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

e depois que eu usá-lo (usando, saída margem clara ou explicitamente definindo myClass = 0;). Objeto java ainda está vivo - mesmo depois de chamar Runtime.gc

Eu vejo no despejo que o objeto ainda está na pilha JVM para o processo de MATLAB (usando jmap -histo PID) e, portanto, eu assumo si MATLAB ainda está referenciando o objeto - apesar chamando para limpar, Java claro, aulas claras , etc. - nada ajuda

Todas as idéias?

Foi útil?

Solução 2

O gnovice solução sugerida parecem funcionar - adicionando ao processo de destruição da linha

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

causou o objeto a não estar presente na pilha JVM do MATLAB.


-Lo parecido com um bug no MATLAB que faz com que o referenciamento da JAVA objetos em classes de MCOs sem referência.

Outras dicas

O mais recente formato de programação orientada a objetos para MATLAB ainda é algo que eu não pulou com os dois pés ainda, mas posso tentar e dar-lhe algumas ideias ...

Eu estou supondo que você está criando uma "classe de valor" em oposição a uma "classe handle" (Você pode conferir mais sobre estes aqui ). Quando as cópias de classes de valor são feitos, todos os conteúdos são copiados. Se você tiver uma cópia errante do objeto flutuando em algum lugar, então ainda há um identificador para o objeto Java na existência.

Se você fosse construir sua classe fora da classe alça em vez disso, você poderia destruir explicitamente o objeto Java dentro do destruidor de classe (ou seja, o método delete sobrecarregada).

Apenas um par aleatório idéias. Espero que eles são úteis.

Eu não tenho certeza se isso vai corrigi-lo, mas tente fazer a atribuição no construtor, e não no bloco de propriedades. Além disso, ele poderia ser útil para mencionar a versão exata Matlab você está usando.

Tente dar uma olhada no aspecto onCleanup da OOP. Eu acho que Loren fez um blog sobre ele cerca de 3 meses atrás.

HTH. Dan

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top