unmanaged - jug ru grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги...
TRANSCRIPT
![Page 2: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/2.jpg)
www.luxoft.com
ЦЕЛИ ДОКЛАДА
Теоретическая часть • Вспомнить Рихтера и red-gate добрым словом, вспомним базовые знания по памяти в .Net • Рассмотрим модель типов .Net и поддержку наследования Практическая часть • Достанем скрытые структуры CLI тремя способами, без использования рефлексии • Пробросим object в другой AppDomain • Построим свой ObjectPool вне .Net памяти • Соберем в памяти все .Net объекты
Сделать выводы
![Page 3: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/3.jpg)
www.luxoft.com
БАЗОВЫЕ ПРЕДСТАВЛЕИЯ О ПАМЯТИ .NET
![Page 4: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/4.jpg)
www.luxoft.com
БАЗОВЫЕ ЗНАНИЯ
Области памяти: § Есть стек потока – он для работы методов § Есть SOH – он для «маленьких» объектов (<85000B) § Есть LOH – он для «больших» объектов § Есть Code Heap – там размещаются результаты JIT компиляции § Есть также High Frequency Heap – содержит структуры поддержки системы типов, к которым идет частое обращение (MethodTable, VTable) § Есть еще Low Frequency Heap – содержит редкоиспользуемые структуры поддержки системы типов § Stub Heap – содержит заглушки для COM Interop, p/invoke
![Page 5: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/5.jpg)
www.luxoft.com
Stack потока: § Предназначен для хранения параметров методов и хранения адреса возврата из метода для каждого вызова метода § Соответственно, при вызове метода, в стеке выделяется фрейм, в который перед вызовом складываются все параметры (включая this для instance методов) и адрес возврата (адрес сл. инструкции: на кот. должен перейти ret)
Managed Heaps: § Размещаются все экземпляры классов и value types в качестве их полей § В зависимости от размера уходят либо в SOH, либо в LOH § Управляются механизмом Garbage Collector, который работает по-разному для SOH/LOH
НЕМНОГО ПОПОДРОБНЕЕ
![Page 6: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/6.jpg)
www.luxoft.com
Card Table: § Битовая карта, каждый бит которой отражает измененное состояние поля класса, которое попало в диапазон байт, за который этот бит отвечает § Диапазон байт равен 4К § При проходе по полям, GC проходит в поле если Gen поля ниже, либо выше, но содержит установленные биты
Ephemeral Segments: § Сегменты – это группы страниц памяти, внутри которых размещаются кучи § SOH куча, имеющая несколько сегментов, размещает Gen0 и Gen1 в последнем выделенном сегменте, а все остальные сегменты занимает Gen2
И ЕЩЕ НЕМНОГО ПОПОДРОБНЕЕ
![Page 7: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/7.jpg)
www.luxoft.com
ПАМЯТЬ ПРОЦЕССОВ - ВИРТУАЛЬНАЯ
§ Это значит что доступное адресное пространство – не RAM § Часть – на диске, часть – в RAM § Доступность не линейная, а «островками» с настройками прав доступа
§ Нет понятия AppDomain – значит нет ограничения доступа между ними
§ А при наличии прав, можно снять память чужого процесса
![Page 8: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/8.jpg)
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
![Page 9: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/9.jpg)
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
Размер массива
![Page 10: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/10.jpg)
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
Длина и стартовый индекс измерения
Данные
![Page 11: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/11.jpg)
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
![Page 12: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/12.jpg)
www.luxoft.com
Структура типов данных
Header
GetHashCode
ToString
GetValue
…
Header
GetHashCode
ToString
GetValue
…
MethodBody
MethodBody
MethodBody
MethodBody
MyBaseClass MyDerivedClass
![Page 13: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/13.jpg)
www.luxoft.com
Структура типов данных
Header
GetHashCode
ToString
GetValue
…
Header
GetHashCode
ToString
GetValue
…
MethodBody
MethodBody
MethodBody
MethodBody
MyBaseClass MyDerivedClass
Sync Block Index
Method Table Data
![Page 14: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/14.jpg)
www.luxoft.com
ПРИМЕРЫ КОДА
![Page 15: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/15.jpg)
www.luxoft.com
ДЛЯ САМОРАЗВИТИЯ
Подробнее на www.luxoft-training.ru
Мастер-класс от .Net-гуру, Дино Эспозито
«Свежий взгляд на проектирование
реального ПО: от DDD и CQRS до Event
Sourcing»
25 октября, Москва
![Page 16: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество](https://reader034.vdocuments.site/reader034/viewer/2022042921/5f6b72f2049dec0264724c0b/html5/thumbnails/16.jpg)
www.luxoft.com
`
ВОПРОСЫ
Fb: @luxoftTwitter: @sidristij, @luxoft
Luxoft.com