Пакеты, произведенные MATLAB® Compiler SDK™, используют Java® Native Interface (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.
Ядро C++ MATLAB Runtime выделяет ресурсы для массивов, созданных API Java.
Когда вы создаете MWArray
объекты взаимодействовать с MATLAB Runtime, JVM создает интерфейсный объект для mxArray
MATLAB объект. Ядро C++ MATLAB Runtime выделяет фактические ресурсы, чтобы сохранить
mxArray
объект. Это оказывает влияние на то, как JVM освобождает ресурсы, используемые вашим приложением. Большинство ресурсов, используемых при взаимодействии с MATLAB, создается ядром C++ MATLAB Runtime. JVM только знает о ресурсах MATLAB через обертки JNI, созданные для них. Из-за этого JVM не знает размера используемых ресурсов и не может эффективно управлять ими использующий его созданный в сборщике "мусора". JVM также не управляет потоками, используемыми MATLAB Runtime, и не может очистить их.
Все классы MATLAB Compiler SDK имеют статические методы правильно избавиться от их ресурсов. Методы распоряжения инициировали освобождение от базовых ресурсов в ядре C++ MATLAB Runtime. Не правильно избавление от объектов MATLAB Compiler SDK может привести к непредсказуемому поведению и может быть похожим на ваше приложение, имеет утечку памяти.