Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中的Java引用问题_Java_Matlab_Reference_Garbage Collection - Fatal编程技术网

MATLAB中的Java引用问题

MATLAB中的Java引用问题,java,matlab,reference,garbage-collection,Java,Matlab,Reference,Garbage Collection,我有一个MATLAB类,其中包含对java对象的引用 classdef MyClass properties j = myJavaClass end methods ... end end 在我使用它(使用clear、scope exit或显式设置myClass=0;)之后,java对象仍然是活动的——即使在调用Runtime.gc之后也是如此 我在转储中看到,对象仍然在MATLAB进程的JVM堆中(使用jmap-histo-pID),因此我假设MATLAB本身仍然在引

我有一个MATLAB类,其中包含对java对象的引用

classdef MyClass
  properties
    j = myJavaClass
  end
  methods
...
  end
end
在我使用它(使用clear、scope exit或显式设置myClass=0;)之后,java对象仍然是活动的——即使在调用Runtime.gc之后也是如此

我在转储中看到,对象仍然在MATLAB进程的JVM堆中(使用jmap-histo-pID),因此我假设MATLAB本身仍然在引用该对象——尽管调用了clear、clear JAVA、clear Class等——没有任何帮助


有什么想法吗?

我不确定这是否能解决问题,但请尝试在构造函数中而不是在属性块中进行赋值。另外,提及您正在使用的确切的Matlab版本可能会有所帮助。

最新的面向对象的Matlab编程格式仍然是我还没有完全掌握的东西,但我可以尝试给您一些想法

我猜您正在创建一个“值类”,而不是一个“句柄类”(您可以查看更多关于这些的信息)。复制值类时,将复制所有内容。如果有一个对象的错误副本在某处浮动,那么Java对象的句柄仍然存在

如果要在handle类之外构建类,则可以在类析构函数(即重载的DELETE方法)中显式销毁Java对象


只是一些随机的想法。希望它们能有所帮助。

试着看看OOP的onCleanup方面。我想Loren在3个月前写了一个博客

嗯。
Dan

gnovice建议的解决方案似乎起了作用——将行添加到析构函数中

function delete( obj )
  ...
  jObject = 0;
end
导致对象不存在于MATLAB的JVM堆中


它看起来像是MATLAB中的一个bug,导致在未引用的MCOS类中引用JAVA对象