MATLAB Compiler SDK и JVM

Пакеты, произведенные MATLAB® Compiler SDK™, используют Java® Native Interface (JNI), чтобы взаимодействовать с MATLAB Runtime.

Когда первый объект MATLAB Compiler SDK инстанцируют:

  1. Загружаются зависимые классы MATLAB Compiler SDK.

  2. Серия разделяемых библиотек, формирующих мост JNI от сгенерированного пакета до MATLAB Runtime, загружается.

  3. MATLAB Runtime инициализируется путем создания экземпляра класса C++ под названием mcrInstance.

  4. Интерфейс MATLAB-Java устанавливает связь с JVM™ путем вызова метода JNI AttachCurrentThread.

  5. AttachCurrentThread создает загрузчик класса, который загружает все классы, необходимые коду MATLAB, использующему интерфейс MATLAB-Java.

  6. Ядро C++ MATLAB Runtime выделяет ресурсы для массивов, созданных API Java.

Когда вы создаете объекты MWArray взаимодействовать с MATLAB Runtime, JVM создает интерфейсный объект для объекта MATLAB mxArray. Ядро 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 может привести к непредсказуемому поведению и может быть похожим на ваше приложение, имеет утечку памяти.