UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги...
Transcript of UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги...
www.luxoft.com
ЦЕЛИ ДОКЛАДА
Теоретическая часть • Вспомнить Рихтера и red-gate добрым словом, вспомним базовые знания по памяти в .Net • Рассмотрим модель типов .Net и поддержку наследования Практическая часть • Достанем скрытые структуры CLI тремя способами, без использования рефлексии • Пробросим object в другой AppDomain • Построим свой ObjectPool вне .Net памяти • Соберем в памяти все .Net объекты
Сделать выводы
www.luxoft.com
БАЗОВЫЕ ПРЕДСТАВЛЕИЯ О ПАМЯТИ .NET
www.luxoft.com
БАЗОВЫЕ ЗНАНИЯ
Области памяти: § Есть стек потока – он для работы методов § Есть SOH – он для «маленьких» объектов (<85000B) § Есть LOH – он для «больших» объектов § Есть Code Heap – там размещаются результаты JIT компиляции § Есть также High Frequency Heap – содержит структуры поддержки системы типов, к которым идет частое обращение (MethodTable, VTable) § Есть еще Low Frequency Heap – содержит редкоиспользуемые структуры поддержки системы типов § Stub Heap – содержит заглушки для COM Interop, p/invoke
www.luxoft.com
Stack потока: § Предназначен для хранения параметров методов и хранения адреса возврата из метода для каждого вызова метода § Соответственно, при вызове метода, в стеке выделяется фрейм, в который перед вызовом складываются все параметры (включая this для instance методов) и адрес возврата (адрес сл. инструкции: на кот. должен перейти ret)
Managed Heaps: § Размещаются все экземпляры классов и value types в качестве их полей § В зависимости от размера уходят либо в SOH, либо в LOH § Управляются механизмом Garbage Collector, который работает по-разному для SOH/LOH
НЕМНОГО ПОПОДРОБНЕЕ
www.luxoft.com
Card Table: § Битовая карта, каждый бит которой отражает измененное состояние поля класса, которое попало в диапазон байт, за который этот бит отвечает § Диапазон байт равен 4К § При проходе по полям, GC проходит в поле если Gen поля ниже, либо выше, но содержит установленные биты
Ephemeral Segments: § Сегменты – это группы страниц памяти, внутри которых размещаются кучи § SOH куча, имеющая несколько сегментов, размещает Gen0 и Gen1 в последнем выделенном сегменте, а все остальные сегменты занимает Gen2
И ЕЩЕ НЕМНОГО ПОПОДРОБНЕЕ
www.luxoft.com
ПАМЯТЬ ПРОЦЕССОВ - ВИРТУАЛЬНАЯ
§ Это значит что доступное адресное пространство – не RAM § Часть – на диске, часть – в RAM § Доступность не линейная, а «островками» с настройками прав доступа
§ Нет понятия AppDomain – значит нет ограничения доступа между ними
§ А при наличии прав, можно снять память чужого процесса
www.luxoft.com
Структура типов данных
Sync Block Index
Methods Table Nothing
Обязательная часть
Sync Block Index
Methods Table
Обязательная часть
Boxed Data
Obj
ect
Box
ed
Valu
eTyp
e
Sync Block Index
Methods Table
Обязательная часть
Class Data
Any
R
efTy
pe
www.luxoft.com
Структура типов данных
Длина
Sync Block Index
Methods Table Len
Обязательная часть
Data
Строка
Strin
g 3.
5-
nil
Длина
Sync Block Index
Methods Table Len
Обязательная часть
Data
Строка
Strin
g 4.
0+
nil
Array Len
Размер массива
www.luxoft.com
Структура типов данных
Sync Block Index
Methods Table Len
Обязательная часть
Data
Длина Данные
Arr
ay1 o
f Va
lueT
ypes
A
rray
N o
f Va
lueT
ypes
Длина и стартовый индекс измерения
Sync Block Index
Methods Table L1
Обязательная часть
S1 L2 Data S2 nil
Данные
Methods Table
(items)
Arr
ayN o
f R
efTy
pes
Sync Block Index
Methods Table L1
Обязательная часть
S1 L2 Data S2 nil
Длина и стартовый индекс измерения
Данные
www.luxoft.com
Pointers To MethodDefs and InterfaceDefs
Структура типов данных
Sync Block Index
Methods Table Nothing
Obj
ect
Флаги
Размер Instance
Доп флаги
Количество методов
Количество вирт методов
Количество интерфейсов
MethodTable базового типа
EEModule
EEClass
Флаги
Размер Instance
Доп флаги
Количество методов
Количество вирт методов
Количество интерфейсов
MethodTable базового типа
EEModule
EEClass
Pointers To MethodDefs and InterfaceDefs
High Frequency Heap SOH / LOH
www.luxoft.com
Структура типов данных
Header
GetHashCode
ToString
GetValue
…
Header
GetHashCode
ToString
GetValue
…
MethodBody
MethodBody
MethodBody
MethodBody
MyBaseClass MyDerivedClass
www.luxoft.com
Структура типов данных
Header
GetHashCode
ToString
GetValue
…
Header
GetHashCode
ToString
GetValue
…
MethodBody
MethodBody
MethodBody
MethodBody
MyBaseClass MyDerivedClass
Sync Block Index
Method Table Data
www.luxoft.com
ПРИМЕРЫ КОДА
www.luxoft.com
ДЛЯ САМОРАЗВИТИЯ
Подробнее на www.luxoft-training.ru
Мастер-класс от .Net-гуру, Дино Эспозито
«Свежий взгляд на проектирование
реального ПО: от DDD и CQRS до Event
Sourcing»
25 октября, Москва
www.luxoft.com
`
ВОПРОСЫ
Fb: @luxoftTwitter: @sidristij, @luxoft
Luxoft.com