Реклама:

Захват разных типов исключения. Второй, и более общий, вариант этого примера различает исключения, которые происходят при вызове скомпилированного метода и все другие типы исключений, вводя два пункта catch следующим образом:

public double[] getprimes(int n) {

myclass cls = null; Object[] y = null;

try

{

cls = new myclass();

y = cls.myprimes(1, new Double((double)n)); return (double[])((MWArray)y[0]).getData();

}

/* Захватывает исключение, вызванное myprimes */ catch (MWException e)

{

System.out.println("Exception in MATLAB call: " +

e.toString()); return new double[0];

}

/* Захватывает все другие исключения */ catch (Exception e)

{

System.out.println("Exception: " + e.toString()); return new double[0];

}

}

Порядок пунктов catch здесь важен. Поскольку MWException является подклассом Exception, пункт catch для MWException должен быть перед пунктом catch для Exception. Если порядок будет изменен, то пункт catch MWException никогда не будет выполняться.

3.5.6. Управление собственными ресурсами

Когда ваш код обращается к классам Java, созданным при помощи Java Builder, ваша программа использует собственные (native) ресурсы, которые существуют вне контроля Виртуальной Машины Java (JVM).

Каждый класс преобразования данных MWArray есть интерфейсный класс, который инкапсулирует тип mxArray MATLAB. Инкапсулированный массив MATLAB распределяет ресурсы из собственной (native) кучи памяти. Массив mxArray может быть большим, но он находится вне контроля JVM, поэтому менеджер памяти JVM может не вызывать сборщика мусора прежде, чем становится исчерпанной или сильно фрагментированной собственная память. Это означает, что собственные массивы должны быть явно освобождены. Можно использовать любую из следующих методик к освобождению памяти: «сборка мусора» JVM; метод dispose и метод Object.Finalize.

Использование «сборки мусора» JVM

При создании нового экземпляра класса Java, JVM распределяет и инициализирует новый объект. Когда этот объект перестает быть необходимым, или становится недостижимым, он попадает в категорию мусора JVM. Сборщик мусора освобождает память, распределенную для объекта.

При создании экземпляров классов MWArray, инкапсулирующих типы MATLAB, распределяется также пространство для собственных ресурсов, но эти ресурсы невидимы для JVM и не могут попасть в категорию мусора JVM.

Ресурсы, распределенные объектам MWArray могут быть весьма большими и могут быстро исчерпать доступную память. Чтобы избежать этого, объекты MWArray должны быть как можно скорее явно освобождены приложением, которое создает их.

Использование метода dispose

Лучшая техника для освобождения ресурсов классов, созданных Java Builder -это явный вызов метода dispose. Любой объект Java, включая объект MWArray, имеет метод dispose.

Классы MWArray также имеют метод finalize, называемый завершителем (finalizer), который вызывает dispose. Хотя можно считать завершитель MWArray как своего рода сеть безопасности для случаев, когда dispose не вызывается явно, нужно иметь ввиду, что невозможно определить точно, когда JVM вызывает завершитель и JVM может не обнаружить память, которая должна быть освобождена.


⇐ Предыдущая страница| |Следующая страница ⇒