exponenta event banner

SDK компилятора MATLAB и JVM

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

При создании экземпляра первого объекта SDK компилятора MATLAB:

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

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

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

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

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

  6. Ядро среды выполнения 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 может привести к непредсказуемому поведению и может выглядеть так, как будто в приложении утечка памяти.