Вы, кажется, путаете «Управляемый» и «Сборщик мусора», в то время как часто управляемые языки (например, C # и Java) имеют автоматизированную сборку мусора, «управляемый» фактически относится к тому факту, что существует «виртуальная машина», которая выполняет ваш код (см. http://en.wikipedia.org/wiki/Managed_code).
Так, например, CLR (общеязыковая среда выполнения) - это виртуальная машина, выполняющая код .Net, а JVM (виртуальная машина Java) - это виртуальная машина, выполняющая код Java.
На самом деле вы можете иметь сборщик мусора для неуправляемых языков (например, C ++ ), и наоборот, управлять языками без сбора мусора (РЕДАКТИРОВАТЬ: Я искал некоторые, но не могу найти любой, если не имеет значения Objective C , я не уверен, что в любом случае имеет смысл создавать управляемый язык без сборки мусора)
Как Java, так и C # фактически могут быть скомпилированы непосредственно в машинный код, поэтому они выполняются напрямую, а не с использованием виртуальной машины - для кода .Net это делается с использованием NGEN (фактически CLR компилирует сборки .Net в машину код во время его выполнения, так называемая компиляция "Just in time")
РЕДАКТИРОВАТЬ: В качестве обновления к обновлению вашего вопроса, на самом деле существует целый ряд альтернатив для сбора мусора в спектре между крайностью полного ручного управления памятью и сбора мусора, и много языков, которые компилируются в машинный код, включают различные формы управления памятью, которые не требуют явного освобождения памяти.
Могу я спросить - это вопрос «из интереса», или вы пытаетесь выбрать язык для проекта? Если последний, то почему вы так заинтересованы в том, чтобы ваш язык компилировался в машинный код? Конечно, в случае .Net с вашим JIT-кодом, скомпилированным с вашим кодом, вы получаете ряд преимуществ в производительности (в большинстве случаев), также NGENing ваш код не снимает зависимость от .Net Framework.