MATLAB Java ссылка на проблему - PullRequest
       28

MATLAB Java ссылка на проблему

2 голосов
/ 08 января 2009

У меня есть класс MATLAB, который содержит ссылку на Java-объект

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

и после того, как я его использую (используя команду clear, scope exit или явно установив myClass = 0;), объект java все еще жив - даже после вызова Runtime.gc.

В дампе я вижу, что объект все еще находится в куче JVM для процесса MATLAB (используя jmap -histo pID), и поэтому я предполагаю, что сам MATLAB все еще ссылается на объект - несмотря на вызовы clear, clear JAVA, clear классы и т. д. - ничего не помогает

Есть идеи?

Ответы [ 4 ]

1 голос
/ 10 января 2009

Обходное решение, предложенное gnovice, похоже, работает - добавление к деструктору строки

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

Причиной отсутствия объекта в куче JVM MATLAB.


Это похоже на ошибку в MATLAB, которая вызывает ссылки на объекты JAVA в классах MCOS без ссылок.

1 голос
/ 08 января 2009

Новейший формат объектно-ориентированного программирования для MATLAB - это то, во что я еще не ввязался обеими ногами, но я могу попытаться дать вам несколько идей ...

Я предполагаю, что вы создаете "класс значений", а не "класс дескрипторов" (вы можете узнать больше об этих здесь ). Когда создаются копии классов значений, все содержимое копируется. Если у вас есть ошибочная копия объекта, плавающего где-то, значит, все еще есть дескриптор существующего объекта Java.

Если бы вместо этого вы собирали свой класс из класса дескриптора, вы могли бы явно уничтожить Java-объект внутри деструктора класса (то есть перегруженного метода DELETE).

Просто пара случайных идей. Надеюсь, что они полезны.

0 голосов
/ 09 января 2009

Попробуйте взглянуть на аспект onCleanup ООП. Я думаю, что Лорен вел блог примерно 3 месяца назад.

НТН. Dan

0 голосов
/ 08 января 2009

Я не уверен, что это исправит это, но попробуйте выполнить назначение в конструкторе, а не в блоке свойств. Также было бы полезно указать точную версию Matlab, которую вы используете.

...