RNI приближает время, когда Java-приложения будут создаваться в расчете на Windows
Интерфейс к “родному” коду является наиважнейшим элементом любой реализации Java. Он используется в самых разных процессах: и при обработке простейшей команды рисования кнопки на экране, и при обращениях к критичным по скорости работы драйверам устройств. Этот интерфейс - мост, связывающий платформно-зависимый язык Java с машинно-зависимыми модулями, обеспечивающими “родной” вид графического интерфейса пользователя (ГИП) и низкоуровневый доступ к оборудованию. Кроме того, интерфейс максимально повышает производительность ключевых алгоритмов.
Однако корпорация Microsoft и отделение JavaSoft фирмы Sun Microsystems по-разному подходят к вопросу обеспечения взаимодействия с “родным” кодом, что ставит разработчиков перед трудным выбором.
С самого начала Java-интерфейс к “родному” коду был преднамеренно выделен из общей структуры языка. Документация фирмы Sun на Java 1.0 откровенно предупреждает: “Использовать эти интерфейсы можно только на свой страх и риск, отдавая себе отчет в том, что они будут изменены в последующих версиях Java”.
Но Sun знает, что деятельность Microsoft может нанести ущерб ее планам улучшения языка. В 80-е годы обнаружилось, что методы повышения производительности, использованные программистами Microsoft, затруднили развитие операционной системы Macintosh; в 90-е платформу Java может постигнуть та же участь.
В отличие от формата файлов Java-классов с его гарантированной совместимостью со всеми будущими Java-компиляторами, Sun всегда заявляла, что “родные” методы будут изменяться и могут потребовать в будущем существенной переделки кода использующих их программ.
Однако Microsoft всегда предпочитала постепенные улучшения мгновенной замене или изъятию своих первоначальных (и временами неудачно организованных) структур данных. Sun может заменить свой интерфейс вариантом, лучше отвечающим базовым требованиям надежности и безопасности Java, но Microsoft уже строит собственный RNI (Raw Native Interface - “нечестный” интерфейс доступа к “родному” коду) - подход, название которого говорит само за себя.
RNI-технология максимально увеличивает быстродействие при работе под Windows, но ее использование потребует от группы разработки написания большого количества платформно-зависимого кода при переносе виртуальной машины Java в новую среду. У Microsoft есть для этого люди, но фирмы, создающие ПО для других платформ, аналогичными возможностями могут и не располагать.
RNI также требует, чтобы создатели приложений внимательней следили за взаимодействием между “родным” кодом и Java-процессом автоматического управления памятью, известным как “сборка мусора”. Автоматическое распределение и освобождение памяти - одно из основных преимуществ Java, упрощающее по сравнению с Си++ процесс разработки приложений. От тех же программистов, которые пожелают добиться максимальной производительности Java-приложений под Windows и станут использовать RNI, потребуется больше усилий. Обычно улучшение работы ПО на одной платформе происходит за счет ухудшения его работы на других.
Таким образом, RNI различными способами приближает Java на шаг ближе к цели Microsoft: “Будучи однажды написанным, приложение работает повсюду, но лучше всего - под Windows”.
Питер Коффи (PC Week Labs)