Пакеты, созданные компилятором MATLAB ® SDK™ используют Java ® Native Interface (JNI) для взаимодействия с MATLAB Runtime.
При создании экземпляра первого объекта SDK компилятора MATLAB:
Загружаются зависимые классы SDK компилятора MATLAB.
Загружается ряд общих библиотек, формирующих мост JNI из сгенерированного пакета в среду выполнения MATLAB.
Среда выполнения MATLAB инициализируется путем создания экземпляра класса C++ с именем mcrInstance.
Интерфейс MATLAB-Java устанавливает соединение с JVM™ путем вызова метода JNI. AttachCurrentThread.
AttachCurrentThread создает загрузчик классов, который загружает все классы, необходимые для кода MATLAB, используя интерфейс MATLAB-Java.
Ядро среды выполнения MATLAB C++ выделяет ресурсы для массивов, созданных API Java.
По мере создания MWArray объекты для взаимодействия с MATLAB Runtime, JVM создает объект-оболочку для MATLAB mxArray объект. Ядро среды выполнения MATLAB C++ выделяет фактические ресурсы для хранения mxArray объект. Это влияет на то, как JVM освобождает ресурсы, используемые приложением. Большинство ресурсов, используемых при взаимодействии с MATLAB, создаются ядром MATLAB Runtime C++. JVM знает о ресурсах MATLAB только через созданные для них оболочки JNI. Из-за этого JVM не знает размер потребляемых ресурсов и не может эффективно управлять ими с помощью своего встроенного сборщика мусора. JVM также не управляет потоками, используемыми средой выполнения MATLAB, и не может очистить их.
Все классы SDK компилятора MATLAB имеют статические методы для правильной утилизации своих ресурсов. Методы утилизации инициируют освобождение базовых ресурсов в ядре MATLAB Runtime C++. Неправильное удаление объектов SDK компилятора MATLAB может привести к непредсказуемому поведению и может выглядеть так, как будто в приложении утечка памяти.