Java как центр архипелага - [10]

Шрифт
Интервал

зывает на описатель, хранящий две ссылки - на таблицу методов и

на данные об®екта. Возможны и другие представления.

Java-машина  является  32-разрядной.  Более  длинные   значения

(long,  double) представляются как пара четырехбайтных величин.

Не оговоривается, в каком порядке располагаются элементы  пары;

более  того, верификатор байт-кодов обязан выявлять и отвергать

программы, пытающиеся "вручную" составлять длинные значения.

            4.2.2.2. Регистры

В Java-машине должны поддерживаться следующие регистры:

- pc  -  счетчик команд; указывает на код операции для команды,

которая будет выполняться следующей.

- vars - базовый регистр для доступа к локальным переменным те-

кущего метода.

- optop - указатель на вершину стека операндов. Java-машина яв-

ляется стековой, поэтому основная часть команд  берет  операнды

из стека и туда же помещает результат.

- frame - указатель на структуру, содержащую окружение  времени

выполнения.

В  свою  очередь, окружение времени выполнения используется для

реализации трех целей: динамической загрузки, возврата из мето-

дов и обработки исключительных ситуаций.

Для обеспечения динамической загрузки, окружение времени выпол-

нения содержит ссылки на таблицу сивмолов текущего метода и те-

кущего класса. Перед началом выполнения метода выполняется  ре-

дактирование  его  внешних  связей (настройка ссылок на внешние

методы и внешние данные). Подобная поздняя настройка ссылок де-

лает сгенерированный код устойчивым по отношению  к  изменениям

во внешних классах.

Для  обеспечения  нормального  возврата  из методов выполняется

восстановление регистрового окружения вызывающего метода.

Для обработки  исключительных  ситуаций  Java-машина  выполняет

проход  по  стеку  вызова методов и отыскивает самую внутреннюю

конструкцию catch, обрабатывающую случившееся событие.

В принципе окружение времени выполнения может содержать  допол-

нительную  информацию, необходимую, например, для отладки, но в

спецификациях Java-машины это оставлено на  усмотрение  авторов

реализации.

            4.2.2.3. Сбор мусора

Для  создания  об®ектов  во время выполнения выделяется область

динамической памяти. Язык Java рассчитан на то, что эту область

обслуживает сборщик мусора, поскольку в языке нет  средств  для

освобождения  памяти. Как именно работает сборщик мусора, опре-

деляется реализацией Java-машины.

            4.2.2.4. Система команд Java-машины

Команда Java-машины состоит из однобайтного кода  операции,  за

которым следуют операнды (если таковые имеются). Можно выделить

следующие группы команд:

- команды  загрузки констант и переменных в стек операндов. Для

каждого типа данных имеются свои  команды  загрузки.  Например,

команда  с кодом операции dload и операндом, задающим смещение,

загружает в стек из  локальной  переменной  вещественное  число

двойной  точности,  а  команда aload делает то же для ссылки на

об®ект.

- команды запоминания данных из стека в локальных переменных.

- команды управления массивами. Например,  команда  newarray  с

операндом, задающим тип элементов, извлекает из стека требуемый

размер массива, создает его и помещает в стек ссылку на массив.

Отметим,  что для создания массивов с элементами-об®ектами слу-

жит другая команда, anewarray. За счет  подобной  специализации

достигается эффективность интерпретации Java-программ.

- команды  работы  со  стеком. К этой группе относятся команды,

которые удаляют, дублируют,  меняют  местами  верхние  элементы

стека  операндов, а также выполняют другие, более сложные мани-

пуляции со стеком.

- арифметические команды. Операнды извлекаются из  стека;  туда

же помещается результат.

- логические команды (сдвиг, и, или, исключающее или).

- команды преобразования к другому типу.

- команды передачи управления. Например, в команде jsr (переход

на подпрограмму) операндом служит относительный адрес перехода;

адрес  команды,  следующей  за jsr, помещается на вершину стека

операндов. Имеются команды для реализации переключателей.

- команды возврата из функции. Для возврата результатов  разных

типов используются команды с разными кодами операции. Кроме то-

го,  имеется команда breakpoint, которая останавливает нормаль-

ный ход выполнения и передает управление обработчику этого  со-

бытия.

- команды  манипулирования с полями об®ектов (установить/прочи-

тать обычное/статическое поле).

- команды вызова методов. Их четыре. Команда invokevirtual  вы-

зывает (виртуальный) метод на основе анализа информации времени

выполнения.  Команда invokenonvirtual осуществляет вызов на ос-

нове информации времени компиляции - например, вызов метода ро-

дительского класса. Команда invokestatic  вызывает  статический

метод  класса. Наконец, команда invokeinterface вызывает метод,

представленный интерфейсом. Выполнение всех  перечисленных  ко-

манд  связано не только с передачей управления, но и с анализом

разного рода таблиц.

- команда возбуждения исключительной ситуации - athrow.

- прочие об®ектные операции (создать об®ект, проверить тип  об-

®екта).

- команды  сихронизации (войти в критический интервал, выйти из

него).

Мы видим, что не существует семантического разрыва между языком


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Фундаментальные алгоритмы и структуры данных в Delphi

Книга "Фундаментальные алгоритмы и структуры данных в Delphi" представляет собой уникальное учебное и справочное пособие по наиболее распространенным алгоритмам манипулирования данными, которые зарекомендовали себя как надежные и проверенные многими поколениями программистов. По данным журнала "Delphi Informant" за 2002 год, эта книга была признана сообществом разработчиков прикладных приложений на Delphi как «самая лучшая книга по практическому применению всех версий Delphi».В книге подробно рассматриваются базовые понятия алгоритмов и основополагающие структуры данных, алгоритмы сортировки, поиска, хеширования, синтаксического разбора, сжатия данных, а также многие другие темы, тесно связанные с прикладным программированием.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.