Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий | Индекс | Спецификация Виртуальной машины JavaTM |
ГЛАВА 9
Эта глава описывает оптимизацию, реализованную в версии Sun виртуальной машины Java. В этой оптимизации скомпилированный код виртуальной машины Java изменяется во время выполнения для лучшей производительности.
Оптимизация принимает форму ряда псевдоинструкций. Они - разновидности нормальных инструкций виртуальной машины Java, которые используют в своих интересах информацию, изученную во время выполнения, чтобы сделать меньше работы чем исходные инструкции. Псевдоинструкции различимы суффиксом _quick в их мнемонике.
Важно понять, что эти псевдоинструкции не являются частью спецификации виртуальной машины Java или набора команд. Они невидимы за пределами реализации виртуальной машины Java. Однако, в реализации виртуальной машины Java они, оказалось, были эффективной оптимизацией.
Метод, задокументированный в эту главу, покрывается американскими Доступными 5 367 685.
Для инструкций, которые переписываются, каждый экземпляр инструкции заменяется на ее первом выполнении _quick псевдоинструкцией. Последующее выполнение того экземпляра инструкции всегда является _quick разновидностью. У большинства инструкций с _quick разновидностями есть только единственная альтернативная версия, хотя у некоторых есть несколько.
Во всех случаях инструкции с _quick разновидностями ссылаются на постоянный пул, довольно дорогостоящую работу. _quick псевдоинструкции экономят время, используя факт, что, в то время как в первый раз инструкция, ссылающаяся на постоянный пул, должна динамически разрешить постоянную запись пула, последующие вызовы той же самой инструкции должны сослаться на тот же самый объект и не должны разрешить запись снова. Процесс перезаписи следующие:
_quick разновидность инструкции может предположить, что элемент в постоянном пуле был уже разрешен и что это разрешение не генерировало ошибок. Это просто выполняет намеченную работу на разрешенном элементе. Существенное количество времени таким образом сохраняется на всех последующих вызовах псевдоинструкции.
class
файлы. Они обычно - невидимая деталь реализации, так, чтобы решения, такие как варианты кода операции оставили до конструктора. Однако, есть исключения к этому правилу. Определенные инструменты, такие как отладчики и своевременный (JIT), генераторы кода, возможно, должны знать детали о _quick псевдоинструкциях так, чтобы они могли работать на коде, который был уже выполнен. Реализация виртуальной машины Java может использовать методы, подобные, но отличающийся от _quick псевдоинструкций Sun, или может использовать различные числа кода операции от реализации Sun. Инструменты, принимающие детали _quick псевдоинструкций Sun, возможно, не работают с этими отличающимися реализациями.
API разрабатываются для генераторов кода JIT и отладчиков. Эти API могут обеспечить способы скрыть детали внутренних псевдоинструкций так, чтобы инструменты, которые независимы от внутренних деталей реализации, могли быть записаны. Однако, с этой записи этих API еще не были установлены, так тем временем мы документируем значения кода операции вместе с другими деталями _quick инструкций Sun. Инструменты могут предположить, что реализации виртуальной машины Java, которые происходят из Sun, или которые пишутся, чтобы быть совместимыми с реализацией Sun, будут следовать за спецификацией, данной ниже.
Связаться jvm@java.sun.com
для получения дополнительной информации о состоянии отладчика и API генератора кода JIT.
Содержание | Предыдущий | Следующий | Индекс
Спецификация Виртуальной машины Java
Авторское право © 1996, 1997 Sun Microsystems, Inc. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com