1) De compilar el MSIL se encarga un compilador JIT, que compila funcion a funcion la primera vez que son llamadas (y solamente esa) a partir de entonces se ejecuta su version compilada (igual que si fuera C++). Con la consecuencia de que no te lo puedes llevar a otra arquitectura y ejecutarlo (como si puedes hacer con Java por ser interpretado).
2) De la recoleccion de basura se encarga un GC (Garbage Collector), que no tiene nada que ver con que sea ejecutado en maquina virtual o compilado... existen tambien GC para C++ (o cualquier otro lenguaje compilado), si bien el C++ ANSI no lo incluye (aunque Bjarne Stroustrup se planteo incluirlo).
1) De compilar el MSIL se encarga un compilador JIT, que compila funcion a funcion la primera vez que son llamadas (y solamente esa) a partir de entonces se ejecuta su version compilada (igual que si fuera C++). Con la consecuencia de que no te lo puedes llevar a otra arquitectura y ejecutarlo (como si puedes hacer con Java por ser interpretado).
2) De la recoleccion de basura se encarga un GC (Garbage Collector), que no tiene nada que ver con que sea ejecutado en maquina virtual o compilado... existen tambien GC para C++ (o cualquier otro lenguaje compilado), si bien el C++ ANSI no lo incluye (aunque Bjarne Stroustrup se planteo incluirlo).
www.hpl.hp.com/personal/Hans_Boehm/gc/ (Aqui tienes un GC para C++ y C hecho por los chicos de HP)
3) ¿Seguridad? Que c*****nes tiene que ver la seguridad con que las maquinas virtuales... ¿es que los lenguajes compilados son acaso inseguros?
No leerse con tono borde... sino con tono de estar en shock con las preguntas.