MATLAB中的Java引用问题
我有一个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本身仍然在引
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个月前写了一个博客 嗯。
Dangnovice建议的解决方案似乎起了作用——将行添加到析构函数中
function delete( obj )
...
jObject = 0;
end
导致对象不存在于MATLAB的JVM堆中
它看起来像是MATLAB中的一个bug,导致在未引用的MCOS类中引用JAVA对象