MATLAB Compiler SDK и JVM

Пакеты производства MATLAB® Compiler SDK™ использования Java® Собственный интерфейс (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. Ядро 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 может привести к непредсказуемому поведению и может показаться, что ваше приложение имеет утечку памяти.