Управляемый код означает JIT или GC? - PullRequest
2 голосов
/ 27 сентября 2011

Я видел несколько объяснений того, что означает «управляемый» код, и некоторые нацелены на идею компилирования управляемого кода на промежуточный язык и JITed, а другие рассказывают о GC и управлении памятью. Что на самом деле делает язык управляемым, или это оба, или нет?

Ответ GC имеет большой смысл, так как память управляется (наследованный «управляемый код»), но гипотетически не может быть языком, который имеет GC, но является нативным (не скомпилированным в IL). GC и IL-код как-то тесно связаны?

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Нет, я бы не сказал, что GC и IL тесно связаны. На самом деле одно может существовать без другого - и иногда это так.

Основная цель IL - сделать его независимым от платформы и позволить JIT проводить очень специфические оптимизации, которые зависят от платформы. Например, x86, x64, ARM и т. Д. Цель JIT - превратить этот IL-код в собственный машинный код для архитектуры и правильно его оптимизировать.

Вы не могли оптимизировать для x86 и ARM, потому что платформы слишком разные. Вот почему есть JIT для каждой конкретной платформы. JIT может позволить себе роскошь знать, с какой платформой он будет работать. Как автор кода, вы можете не знать.

С другой стороны, GC относится к управлению памятью. Существует множество библиотек Garbage Collector для программного обеспечения, которое не компилируется на промежуточный язык. Возьмите, например, этот , который небольшой, но выполняет свою работу. На эту тему также было много статей .

Возможно, что один может существовать без другого, просто это не так, как мы видим это очень часто.

Так, что делает "управляемый" язык? Для меня это означает, что задействована виртуальная машина определенного типа. В случае .NET, CLR. Он предоставляет различные услуги, такие как GC, Jit, Code Access Security (CAS) и т. Д.

1 голос
/ 27 сентября 2011

Управляемый код означает, что он выполняется виртуальной машиной времени выполнения и обычно подразумевает управление памятью. Это то, что люди имеют в виду, когда говорят «управляемый код». Системные ресурсы (такие как выделение памяти) управляются для вас, кроме всего прочего.

JIT не имеет к этому никакого отношения. JIT является функцией некоторых виртуальных машин времени выполнения, но не является обязательным требованием. Visual Basic 6 использует среду выполнения, но не JIT - она ​​интерпретируется построчно. JIT компилирует блок кода во время вызова. Язык .NET, однако, будет использовать среду выполнения .NET, которая реализует JIT-компиляцию.

1 голос
/ 27 сентября 2011

http://en.wikipedia.org/wiki/Managed_code

Это довольно ясно показывает, что это код, который управляется (работает под виртуальной машиной), а не память.

...