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