Еще в феврале 1990 года он писал, что "эмуляция чужеродных наборов команд и использование промежуточных, не зависящих от процессоров языков становится все более распространенным приемом". По его словам, это утверждение верно и сейчас.

"Необходимо скрыть различия между архитектурами", - считает Фил Уинтерботтом, инженер Bell Laboratories компании Lucent Technologies. Это нужно для того, чтобы сделать программное обеспечение переносимым, то есть исполняемым на различных процессорах. Hекоторые виртуальные машины позволяют разработчикам создавать виртуальные же операционные системы, работающие с одними и теми же системными интерфейсами и службами, виртуальные сети, использующие одно и то же сетевое оборудование и интерфейс, и, наконец, виртуальные графические окружения, всегда предлагающие один и тот же интерфейс. Ярким примером реализации такого подхода является распределенная операционная среда Inferno компании Lucent.

Среди продуктов, которые могли бы использовать такие виртуальные машины, - маршрутизаторы для сетей, служащих для передачи голоса, видео и данных, аппаратные брандмауэры и оборудование для систем Internet-телефонии.

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

Скажем, программы, написанные в расчете на виртуальные машины Java, компилировать достаточно сложно, поэтому специализированные для Java процессоры кажутся более удобными. Однако хорошо спроектированное ПО избавляет от необходимости реализовывать Java на аппаратном уровне.

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

Один из способов увеличения быстродействия виртуальных машин, по словам Уинтерботтома, заключается в том, чтобы компилировать программу "на лету", а не интерпретировать.

В "Предварительном описании технологии" виртуальной машины HotSpot производства Sun системный программист компании Урс Холзл отметил, что для этого можно использовать так называемую "ленивую компиляцию". Идея данного метода состоит в том, чтобы компилировать и оптимизировать участки программного кода по мере обращения к ним. Оптимизированный компилятор HotSpot поддерживает все возможности языка Java, даже в том, что касается затрат производительности.

Холзл также предостерегает от использования для сравнения производительности различных систем тестов производительности, подобных CaffeineMarks, поскольку, по его мнению, результаты таких тестов не коррелируют с реальными программами на языке Java.

Производительность сред Java за последние два года существенно увеличилась и будет продолжать расти. Но Холзл подчеркнул, что "уже сейчас использовать Java могут даже приложения, весьма чувствительные к производительности".

По словам Норма Рубина, технического специалиста компании Digital Semiconductor, при реализации транслятора FX!32 главной целью компании выступала именно производительность. Пока не созданы соответствующие программы, необходимо, чтобы производительность программного обеспечения, написанного для процессора Alpha компании Digital Equipment, составляла хотя бы 70%.

Транслятор FX!32 дает возможность установить и запускать программы, созданные для процессора Intel x86, в системах с Windows NT, где стоят процессоры Alpha. По словам Рубина, благодаря транслятору производительность этих программ достигает уровня Pentium Pro/200 МГц, в то время как быстродействие программ, адаптированных к Alpha/500 МГц, по-прежнему соответствует характеристикам этого процессора. При попытке выполнить приложение FX!32 определяет, предназначено ли оно для процессора x86. Если да, то для его запуска в первый раз используется эмулятор. Одновременно с этим в фоновом режиме FX!32 запускает трансляцию (а затем и оптимизацию) для выполнявшихся компонентов программы, поэтому в следующий раз данная прикладная программа исполняется быстрее.

Поделитесь материалом с коллегами и друзьями