Соблюдайте осторожность при использовании машинно-зависимых методов

Интерфейс Java Native Interface (JNI) дает возможность приложениям на языке Java делать вызов машинно-зависимых методов (native method), т. е. специальных методов, написанных на машинно-зависимом языке программирования, таком как С или С++. Перед тем как вернуть управление языку Java, машинно-зависимые методы могут выполнить любые вычисления, используя машинно-зависимый язык.

Исторически машинно-зависимые методы имели три основные области применения. Они предоставляли доступ к механизмам, соответствующим конкретной платформе, таким как реестр и блокировка файла. Они обеспечивали доступ к унаследованным библиотекам кода, которые, в свою очередь, могли дать доступ к унаследованным данным. Наконец, машинно-зависимые методы использовались для того, чтобы писать на машинно-зависимом языке те части приложений, которые критичны для быстродействия, тем самым повышая общую производительность.

Применение машинно-зависимых методов для доступа к механизмам, специфичным для данной платформы, абсолютно оправданно. Однако по мере своего развития платформа Java предоставляет все больше и больше возможностей, которые прежде можно было найти лишь на главных платформах. Например, появившийся в версии 1.4 пакет jаvа.util.рrefs выполняет функции реестра. Оправданно также использование машинно-зависимых методов для доступа к унаследованному коду, однако есть более хорошие способы доступа к унаследованному коду. Например, интерфейс JDBC (Jаvа DataBase Connectivity) обеспечивает доступ к унаследованным базам данных.

В версии 1.3использование машинно-зависимых методов для повышения производительности редко оправдывает себя. В предыдущих версиях это часто было необходимо, однако сейчас созданы более быстрые реализации JVM. И теперь для большинства задач можно получить сравнимую производительность, не прибегая к машинно-зависимым методам. Например, когда в версию 1.1 был включен пакет java.math.BigInteger был реализован поверх быстрой библиотеки арифметических операций с многократно увеличенной точностью, написанной на языке С. В то время это было необходимо для получения приемлемой производительности. В версии 1.3 класс BigInteger полностью переписан на языке Java и тщательно отрегулирован. Для большинства операций и размеров операндов новая версия оказывается быстрее пер во начальной во всех реализациях JVM 1.3 компании Sиn.

coMra-Therapy — A Brief Explanation


Читать еще…

Понравилась статья? Поделиться с друзьями: