Java говорит на ”родном” языке
Бета-версия компилятора HPJ корпорации IBM обеспечивает высокую скорость трансляции, но не лишена специфических недостатков
Разработчикам, желающим использовать язык Java для решения задач, критичных по времени исполнения, следует внимательно изучить возможности компилятора High Performance Compiler for Java (или HPJ) корпорации IBM, транслирующего Java-классы в “родной” код.
Специалисты Тестового центра PC Week Labs провели испытания ранней бета-версии этого компилятора для Windows NT. Выраженная в единицах Tak производительность программы, скомпилированной с помощью HPJ, увеличивалась (при полной оптимизации) в 4,35 раза по сравнению с тем же показателем для Java-интерпретатора из комплекта Java Development Kit 1.1 фирмы JavaSoft. Максимальная оптимизация HPJ обеспечивает 10-процентный рост скорости работы по сравнению с неоптимизированным кодом, увеличивая при этом время трансляции лишь на 3%.
Объем оптимизированного исполняемого файла (около 400 Кб) был всего лишь на несколько процентов меньше, чем у файла, полученного без оптимизации. Однако он оказался просто огромным по сравнению с объемом соответствующего файла класса, чуть большим 1 Кб.
На самом деле, никто не станет переводить в “родной” код те Java-модули, которые часто передаются по сети. В основном будет производиться компиляция серверных модулей. В этом случае размер файлов имеет второстепенное значение.
Объем выполняемых модулей HPJ кажется не таким уж большим по сравнению с многомегабайтными результатами работы других инструментов компиляции из Java в “родной” код, например SuperCede корпорации Asymetrix.
Текущая версия HPJ, которую можно получить с Web-узла IBM (www.alphaWorks.ibm. com), предназначена для предварительного ознакомления с этой технологией. Последующие версии, возможно, потребуют перекомпиляции программы. Сроки их выхода пока не установлены. Однако руководство IBM сообщило, что вскоре инструмент VisualAge for Java будет дополнен технологией HPJ.
Несмотря на свое быстродействие, HPJ имеет ряд существенных ограничений. Так, онлайновая “белая книга” корпорации IBM характеризует эту бета-версию компилятора как “реализацию версии 1.0.2 языка Java с некоторыми ограничениями”. Многие разработчики считают, что это слишком мягко сказано, так как не поддерживаются такие важные элементы языка, как интерфейсы прикладного программирования java.awt и java.applet, которые являются ключевыми для развертывания работающих в браузере портативных графических Java-модулей, соблюдающих требования безопасности.
Кроме того, поведение некоторых основных интерфейсов Java, например println, предназначенного для вывода данных текста в стандартный выходной поток, отличалось от предначертанного стандартом. В бета-версии HPJ отсутствуют также две функции, исключительно важные для снижения стоимости жизненного цикла ПО: динамическая загрузка классов и то, что IBM называет RRBC (Release-to-Release Binary Compatibility - совместимость последующих версий с предыдущими на уровне машинных кодов).
По мнению представителей IBM, стабильно работающий серверный модуль можно скомпилировать заранее, а можно и позже - по первому же обращению к нему в первом рабочем сеансе. В этом случае придется выбирать между менее глубокой оптимизацией, производимой just-in-time-компилятором (то есть системой компиляции в “родной” код в процессе выполнения программы), и более продолжительной трансляцией, выполняемой статическим компилятором, таким, как HPJ.
Другой компромисс - между удобством использования и производительностью - достичь труднее. Одним из преимуществ Java перед Си++ является возможность модернизации одного модуля без перекомпиляции связанных с ним других модулей. В том случае, если код скомпилирован статически, добиться этого крайне сложно. Проблему можно решить, используя, например, модифицированную утилиту “компоновщик/загрузчик”, сохраняющую больше информации о классах и методах (что, правда, ведет к увеличению времени загрузки), или создав среду выполнения, “знающую” об объектах.
Онлайновая “белая книга” IBM описывает различные варианты решений, позволяющих добиться сочетания гибкости программы, использующей динамические классы, и высокой производительности, свойственной статически скомпилированному ПО. Например, предлагается включить в среду выполнения just-in-time-компилятор, который сможет создать из класса динамически связываемую библиотеку (DLL - dynamic link library), а затем вызвать эту библиотеку из статически скомпилированного исполняемого модуля.
Питер Коффи (PC Week Labs)
Резюме ДЛЯ РУКОВОДИТЕЛЕЙ
Тем разработчикам, которые хотят повысить производительность Java и избежать накладных расходов на интерпретацию или just-in-time-компиляцию, следует обратить внимание на бета-версию A6 системы High Performance Compiler for Java корпорации IBM - полностью оптимизированный статический компилятор с языка Java.
Методика оценки: www.pcweek.com/reviews/meth.html.
Бета-версия
High Performance Compiler for Java.Корпорация IBM
(Армонк, шт. Нью-Йорк)
Телефон представительства в Москве: (095) 940-2000; Web-адрес: www.alphaWorks.ibm.com.
+ Эффективная оптимизация; размер исполняемых файлов меньше размера многих динамических библиотек.
-- Платформно-зависимый код; необходимость выбора между производительностью и преимуществами динамического связывания.