Составители:
Рубрика:
жировать объекты по размеру и использовать для их хранения разные ку-
чи). Однако на рис. 1.9 изображена только одна куча, так как, по нашему
мнению, количество куч определяется конкретными реализациями CLI и
для понимания работы VES не существенно.
Спецификация VES предполагает, что для удаления ненужных объе-
ктов из кучи будет использоваться какой-либо алгоритм автоматического
управления памятью. При этом детали такого алгоритма не рассматрива-
ются, то есть в реализациях CLI могут применяться различные алгоритмы
сборки мусора.
В заключение необходимо отметить, что состояния нитей и состоя-
ние кучи должны находиться в общем адресном пространстве. При этом
параметры и локальные переменные метода являются частью состояния
метода и, следовательно, видимы только для нити, в которой этот метод
выполняется. Однако они могут содержать ссылки на объекты, размещен-
ные в куче и видимые для других нитей. Поэтому изменение объекта в ку-
че из одной нити может повлиять на работу других нитей и считается по-
бочным эффектом.
1.3.2. Состояние метода
На рис. 1.10 изображена схема состояния метода. Элементы состоя-
ния метода можно условно разделить на две группы: изменяемые данные
и неизменяемые данные. Изменяемые данные доступны из тела метода
для чтения и записи, в то время как неизменяемые данные либо доступны
только для чтения либо вообще предназначены для внутреннего использо-
вания в системе выполнения.
Рис. 1.10. Состояние метода
Введение в архитектуру Microsoft .NET Framework
23
онной системы, а могут и не отображаться. Сейчас для нас такие детали не
имеют значения.
Состояние виртуальной машины является совокупностью состояний
нитей и состояния кучи.
Состояние нити представляет собой односвязный список состояний
методов. Метод, состояние которого находится в самом конце этого спи-
ска, является активным, то есть выполняемым в данный момент времени.
Если активный метод вызовет другой метод, то в конец списка будет доба-
влено новое состояние для вызываемого метода. Если же активный метод
закончит свою работу, то его состояние будет удалено из списка.
Такая схема состояния нити является абстракцией традиционной мо-
дели последовательности вызовов методов. Традиционная модель предпо-
лагает наличие для каждой нити единого стека, в котором для каждого вы-
званного метода размещаются его параметры, локальные переменные, а
также служебная информация, необходимая для обеспечения возврата уп-
равления в вызвавший метод. Разработчики спецификации CLI созна-
тельно отказались от использования в явном виде единого стека вызовов.
Это позволяет реализациям CLI выбирать наиболее эффективные согла-
шения о вызовах и размещении данных в стеке, учитывая особенности
конкретных аппаратных средств.
Рис. 1.9. Состояние виртуальной машины
Состояние кучи определяется состояниями содержащихся в ней объ-
ектов. Спецификация VES содержит упоминание о том, что допустимо су-
ществование сразу нескольких куч (например, реализация CLI может ран-
22
CIL и системное программирование в Microsoft .NET
Состояние
метода
Состояние
метода
Состояние
метода
Нить
Состояние
метода
Состояние
метода
Нить
Состояние
метода
Состояние
метода
Нить
Куча
Среда выполнения
Состояние метода
Изменяемые данные
Указатель инструкции
Стек вычислений
Локальные переменные
Неизменяемые данные
Описатель метода
Описатель безопасности
Состояние возврата
Параметры
Область локальных данных
22 CIL и системное программирование в Microsoft .NET Введение в архитектуру Microsoft .NET Framework 23 онной системы, а могут и не отображаться. Сейчас для нас такие детали не жировать объекты по размеру и использовать для их хранения разные ку- имеют значения. чи). Однако на рис. 1.9 изображена только одна куча, так как, по нашему Состояние виртуальной машины является совокупностью состояний мнению, количество куч определяется конкретными реализациями CLI и нитей и состояния кучи. для понимания работы VES не существенно. Состояние нити представляет собой односвязный список состояний Спецификация VES предполагает, что для удаления ненужных объе- методов. Метод, состояние которого находится в самом конце этого спи- ктов из кучи будет использоваться какой-либо алгоритм автоматического ска, является активным, то есть выполняемым в данный момент времени. управления памятью. При этом детали такого алгоритма не рассматрива- Если активный метод вызовет другой метод, то в конец списка будет доба- ются, то есть в реализациях CLI могут применяться различные алгоритмы влено новое состояние для вызываемого метода. Если же активный метод сборки мусора. закончит свою работу, то его состояние будет удалено из списка. В заключение необходимо отметить, что состояния нитей и состоя- Такая схема состояния нити является абстракцией традиционной мо- ние кучи должны находиться в общем адресном пространстве. При этом дели последовательности вызовов методов. Традиционная модель предпо- параметры и локальные переменные метода являются частью состояния лагает наличие для каждой нити единого стека, в котором для каждого вы- метода и, следовательно, видимы только для нити, в которой этот метод званного метода размещаются его параметры, локальные переменные, а выполняется. Однако они могут содержать ссылки на объекты, размещен- также служебная информация, необходимая для обеспечения возврата уп- ные в куче и видимые для других нитей. Поэтому изменение объекта в ку- равления в вызвавший метод. Разработчики спецификации CLI созна- че из одной нити может повлиять на работу других нитей и считается по- тельно отказались от использования в явном виде единого стека вызовов. бочным эффектом. Это позволяет реализациям CLI выбирать наиболее эффективные согла- шения о вызовах и размещении данных в стеке, учитывая особенности 1.3.2. Состояние метода конкретных аппаратных средств. На рис. 1.10 изображена схема состояния метода. Элементы состоя- ния метода можно условно разделить на две группы: изменяемые данные Среда выполнения и неизменяемые данные. Изменяемые данные доступны из тела метода Куча для чтения и записи, в то время как неизменяемые данные либо доступны только для чтения либо вообще предназначены для внутреннего использо- Нить Нить Нить вания в системе выполнения. Состояние Состояние Состояние метода метода метода Состояние метода Изменяемые данные Неизменяемые данные Состояние Состояние Состояние метода метода метода Указатель инструкции Описатель метода Стек вычислений Описатель безопасности Состояние метода Локальные переменные Состояние возврата Параметры Рис. 1.9. Состояние виртуальной машины Область локальных данных Состояние кучи определяется состояниями содержащихся в ней объ- ектов. Спецификация VES содержит упоминание о том, что допустимо су- Рис. 1.10. Состояние метода ществование сразу нескольких куч (например, реализация CLI может ран-
Страницы
- « первая
- ‹ предыдущая
- …
- 16
- 17
- 18
- 19
- 20
- …
- следующая ›
- последняя »