LLVM tiene un nivel más bajo que las máquinas virtuales típicas como JVM y CLR. Por ejemplo, aunque tiene ganchos para un recolector de basura, no proporciona un recolector de basura en sí.
Del mismo modo, la JVM tiene un compilador JIT incorporado (excepto en versiones muy antiguas). LLVM tiene algunos compiladores JIT para LLVM IR, pero aún depende del desarrollador conectar las cosas y JIT el código.
Cuando la JVM encuentra un externo no resuelto, sale y encuentra la clase correcta para satisfacerlo, y sabe cómo buscar archivos .class directamente en el sistema de archivos y en los archivos .jar 1 . Los compiladores JIT de LLVM tienen ganchos donde puedes decidir cómo se manejan esas cosas. Como era de esperar, algunas personas han escrito algunas versiones predeterminadas, por lo que puede hacer las cosas más o menos en el mismo orden que la JVM, pero también puede ignorarlas y hacer las cosas de manera diferente si lo desea.
En pocas palabras, si está desarrollando un compilador (o algo en ese orden) tiene muchas herramientas para facilitarle la vida. En lugar de preocuparse mucho por la optimización, puede hacer aproximadamente la traducción más simple que puede administrar desde su código fuente a LLVM IR, y luego usar las bibliotecas LLVM para administrar la optimización, JIT, vinculación, etc. Sin embargo, son bibliotecas: proporciona algunas funciones realmente útiles para que no tenga que lidiar con todos los detalles, pero todavía son funciones y todavía está escribiendo código para invocarlas. No es un producto terminado, solo herramientas útiles para construir productos de manera relativamente rápida y fácil.
1 Técnicamente, no todo esto está integrado en la JVM propiamente dicha. Especifica lo que generalmente se llama el cargador de clases primordial como parte de la JVM propiamente dicha, y luego hay cargadores de clases de usuario especificados en java.util.ClassLoader que manejan otras cosas. Algunos cargadores de clases se incluyen de forma predeterminada, y si lo desea lo suficiente, puede complementarlos definiendo los suyos.