Когда вы создаете Java® пакеты с помощью MATLAB® Compiler SDK™, компилятор шифрует ваши функции MATLAB и генерирует один или несколько классов Java, которые переносят ваши функции MATLAB. Классы предоставляют методы, которые позволяют вам вызывать функции, когда вы были бы любой другой метод Java.
Кроме того, javabuilder
пакет, которому предоставляют MATLAB и MATLAB Runtime, содержит MWArray
классы, которые управляют данными, которые передают между Java и MATLAB.
MWArray
Классы преобразования данныхПри записи приложения Java можно представлять объекты использования данных любого MWArray
классы преобразования данных. В качестве альтернативы можно использовать стандартные типы данных Java и объекты.
MWArray
классы преобразования данных создаются как иерархия классов, которая представляет главные типы массива MATLAB.
MWArray
ИерархияКорнем иерархии классов преобразования данных является MWArray
абстрактный класс. MWArray
класс имеет следующие подклассы, представляющие главные типы MATLAB: MWNumericArray
, MWLogicalArray
, MWCharArray
, MWCellArray
, и MWStructArray
. Каждый подкласс хранит ссылку на нативный массив MATLAB того типа.
MWArray
классы обеспечивают следующее:
Конструкторы и финализаторы, чтобы инстанцировать и избавиться от массивов MATLAB
get
и set
методы, чтобы читать и записать данные массива
Методы, чтобы идентифицировать свойства массива
Методы сравнения протестировать равенство или порядок массива
Методы преобразования, чтобы преобразовать в другие типы данных
Примечание
Для полной справочной информации о MWArray
иерархия классов, смотрите com.mathworks.toolbox.javabuilder.MWArray
, который находится в matlabroot
/help/toolbox/javabuilder/MWArrayAPI/
папка.
Если ваш код Java использует нативный примитивный Java или массив как входной параметр, компилятор автоматически преобразует его в экземпляр соответствующего MWArray
класс, прежде чем это будет передано методу. Компилятор может преобразовать любую строку Java, числовой тип или многомерный массив этих типов к соответствующему MWArray
ввод.
В отличие от этого можно вручную преобразовать типы данных Java в один из стандартных типов данных MATLAB с помощью MWArray
классы преобразования данных. Когда вы передаете MWArray
экземпляр как входной параметр, инкапсулированный массив MATLAB передается непосредственно названному методу. Для получения дополнительной информации и примеры, смотрите, Преобразуют Данные Между Java и MATLAB.
Для списка всех типов данных, которые поддерживаются наряду с их эквивалентными типами в MATLAB, см. Правила для Преобразования Данных Между Java и MATLAB.
MWArray
классы преобразования данных позволяют вам передать нативные параметры типа непосредственно, не используя явное преобразование данных. Если вы часто передаете тот же массив, вы можете улучшать производительность своей программы путем хранения массива в экземпляре одного из MWArray
подклассы.
Когда вы передаете аргумент только несколько раз, обычно столь же эффективно передать примитивный тип Java или объект, который механизм вызова автоматически преобразует в эквивалентный тип MATLAB.
Язык программирования Java поддерживает дополнительные аргументы функции в способе, которым MATLAB делает с varargin
и varargout
. Чтобы поддерживать эту функцию MATLAB, компилятор генерирует один перегруженный метод Java, который вмещает любое количество входных параметров.
Типовая функция MATLAB имеет следующую структуру:
function [Out1, Out2, ..., varargout]= foo(In1, In2, ..., varargin)
Слева от знака "равно" функция задает набор явных и дополнительных возвращаемых аргументов.
Справа от знака "равно" функция перечисляет явные входные параметры, сопровождаемые одним или несколькими дополнительными аргументами.
Каждый аргумент представляет тип MATLAB. Когда вы включаете varargin
или varargout
аргумент, можно задать любое количество вводов или выводов вне тех, которые явным образом объявляются.
Когда MATLAB Compiler SDK инкапсулирует ваш код MATLAB, он создает перегруженный метод, который реализует функции MATLAB. Этот перегруженный метод соответствует вызову типовой функции MATLAB для каждой комбинации возможного номера и типа входных параметров.
В дополнение к инкапсуляции входных параметров компилятор создает другой метод, который представляет выходные аргументы функции MATLAB. Этот метод инкапсуляции информации о возвращаемых значениях напоминает mlx
интерфейс сгенерирован для цели MATLAB Compiler SDK C/C++.
Эти перегруженные методы называются стандартным интерфейсом и mlx
интерфейс. Для получения дополнительной информации смотрите Интерфейсы программирования, Сгенерированные MATLAB Compiler SDK.
Примечание
При добавлении полей в структуры данных и массивы структуры данных, сделайте настолько использующие стандартные методы программирования. Не используйте set
команда как ярлык.
Пакеты, произведенные 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.
Ядро 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 может привести к непредсказуемому поведению и может быть похожим на ваше приложение, имеет утечку памяти.