문제

Java 개체에 대한 참조가 포함 된 Matlab 클래스가 있습니다.

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

그리고 그것을 사용한 후 (Clear, Scope Exit 또는 명시 적으로 MyClass = 0;) Java 객체는 런타임을 호출 한 후에도 여전히 살아 있습니다.

덤프에서 객체가 여전히 Matlab 프로세스의 JVM 힙에 있다는 것을 알 수 있으며 (JMAP -Histo PID 사용) MATLAB 자체는 여전히 객체를 참조하고 있다고 가정합니다. 명확하고 명확한 Java, Clear Classes 등을 호출하도록 요청합니다. - 아무것도 도움이되지 않습니다

어떤 아이디어?

도움이 되었습니까?

해결책 2

제안 된 해결 방법은 작동하는 것 같습니다.

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

Matlab의 JVM 힙에 물체가 존재하지 않았습니다.


MATLAB의 버그처럼 보입니다.

다른 팁

Matlab의 최신 객체 지향 프로그래밍 형식은 아직 두 발로 뛰어 들지 않은 것이지만 몇 가지 아이디어를 줄 수 있습니다 ...

나는 당신이 "핸들 클래스"와는 달리 "값 클래스"를 만들고 있다고 생각합니다 (이것에 대해 더 자세히 확인할 수 있습니다. 여기). 가치 클래스의 사본이 만들어지면 모든 내용이 복사됩니다. 어딘가에 떠 다니는 물체의 잘못된 사본이 있다면 여전히 Java 물체에 대한 손잡이가 있습니다.

대신 핸들 클래스에서 클래스를 구축하려면 클래스 파괴자 내에서 Java 객체를 명시 적으로 파괴 할 수 있습니다 (즉, 과부하 된 삭제 방법).

몇 가지 임의의 아이디어. 그들이 도움이되기를 바랍니다.

이것이 해결 될지 확실하지 않지만 속성 블록이 아닌 생성자에서 할당을 만들어보십시오. 또한 사용중인 정확한 MATLAB 버전을 언급하는 것이 도움이 될 수 있습니다.

OOP의 oncleanup 측면을 살펴보십시오. Loren은 약 3 개월 전에 블로그를 작성했다고 생각합니다.

HTH. 단

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top