Comments 11
Спасибо за отличный пост! Очень интересная информация. Есть несколько вопросов:
- Вы пробовали найти в исходниках нового CoreCLR непосредственный код методов, которые отвечают за описанную вам логику?
- В посте вы описываете работу JIT-x86. Есть ли какие-нибудь принципиальные отличия в JIT-x64?
- Есть ли отличия между старым JIT и новым RyuJIT в отношении описанных вами вещей?
+4
спасибо :)
- Для Virtual stub dispatch — virtualcallstub.h
- x64 для интерфейсов кэширует либо сразу, либо линейный поиск. плана как для x86, увы, нет. MethodDesc для generic-методов передается также
- RyuJIT — признаюсь, не щупал. дождемся финального релиза )
+3
HotSpot в Java
HotSwap
0
Спасибо за отличную статью! Жалко только на VS2015 не получается то же самое провернуть: при попытку запустить sos жалуется
.load sos
Error during command: Warning. Extension is using a callback which Visual Studio does not implement.
Error during command: Exception c0000005 occurred at 59D66D56
+1
UFO just landed and posted this here
Вы про Generics cyclomatic dependencies?
Все это «разворачивается» в 3 класса в каждом из которых по одному полю, более ничего.
Если бы эти поля инициализировались бы в конструкторе, то тогда мы получим stackoverflow — здесь CLR уже никаких оптимизаций не может делать
Хочу заметить, что новых специализаций не будет, т.е. остаются все те же 3 класса.
Надеюсь этот момент прояснился)
Все это «разворачивается» в 3 класса в каждом из которых по одному полю, более ничего.
Если бы эти поля инициализировались бы в конструкторе, то тогда мы получим stackoverflow — здесь CLR уже никаких оптимизаций не может делать
Хочу заметить, что новых специализаций не будет, т.е. остаются все те же 3 класса.
Надеюсь этот момент прояснился)
0
UFO just landed and posted this here
т.к. мы выделяем память явно.
экземпляр одного типа будет иметь поле со специализацией другого (который так же содержит в себе текущий), что чревато рекурсией.
так же это важно с семантической точки зрения, т.к. .NET поддерживает интроспекцию (Reflection), а каждый такой экземпляр должен будет иметь поле, которое также имеет поле и т.д. граф должен быть создан, если иницализация (т.е. конструктор вызван).
экземпляр одного типа будет иметь поле со специализацией другого (который так же содержит в себе текущий), что чревато рекурсией.
так же это важно с семантической точки зрения, т.к. .NET поддерживает интроспекцию (Reflection), а каждый такой экземпляр должен будет иметь поле, которое также имеет поле и т.д. граф должен быть создан, если иницализация (т.е. конструктор вызван).
0
Просто не стоит воспринимать Generic как template и все будет нормально :)
0
Sign up to leave a comment.
Age of JIT compiling. Part II. CLR is watching you