MATLAB Java problema referenciando
-
05-07-2019 - |
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?
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