2010-10-08 21 views
11

Hace algún tiempo encontré el proyecto MJVM. Lamentablemente, este proyecto ha sido abandonado por su autor (pregunté Igor por correo electrónico).Implementación de Java de ... ¿JVM?

Me pregunto si hay un proyecto de fuente abierta (continuación) de una implementación completa de una JVM en Java como esta.

Por "completo", quiero decir, no solo para emular dispositivos móviles.

Respuesta

30

La Jikes RVM es probablemente la implementación más destacada de JVM escrita en Java. Sin embargo, su implementación de nivel más bajo consiste simplemente en llamadas de métodos estáticos a una interfaz "mágica" que es tratada especialmente por el compilador y traducida al código nativo.

El Maxine VM (originalmente desarrollado por Sun Labs, ahora Oracle Labs) es una verdadera metacircular VM , en la que no sólo todo lo que está escrito en Java, pero no hay una especial forma de casquillo en el compilador pasando. Aún más: no solo la máquina virtual Maxine está escrita en Java, sino que incluso ejecuta en sí misma. Esto puede parecer una locura, y para ser sincero, no tengo idea de cómo funciona, pero está basado en el Klein VM (desarrollado por Sun Labs) que hace lo mismo con el lenguaje de programación Self.

Esto tiene algunas propiedades muy interesantes: desde la propia JVM es parte de la base de código que la JVM interpreta, la misma base de código que el código de usuario pertenece a, esto significa que se puede hacer optimizaciones tales como procesos en línea a través del límite VM. IOW: puede alinear código de VM en el código de usuario y viceversa. También significa que la máquina virtual está sujeta al mismo perfil de tiempo de ejecución y optimizaciones dinámicas que   – en otras máquinas virtuales (incluso incluyendo Jikes)   – solo el código de usuario es, lo que significa que la máquina virtual constantemente se vuelve a compilar y volver a compilar. optimizado para adaptarse a cargas cambiantes, cargar nuevas clases, cambiar perfiles, cambiar patrones de uso, etc.

En máquinas virtuales como HotSpot, JRockit, J9 y otras, estas optimizaciones son imposibles, por la sencilla razón de que la JVM solo sabe cómo optimizar el bytecode JVML, pero la VM no está escrita en Java. Pero incluso en Jikes, esto no es posible porque, mientras la VM está escrita en Java, se compila estáticamente en el código nativo antes de que se ejecute, y el código de la VM no es parte del código que la VM "ve ".

La Squawk VM también es una JVM desarrollada por Sun Labs, ahora Oracle Labs. A diferencia de Maxine, que es más o menos similar a J9, HotSpot o JRockit en su público objetivo, Squawk es más análogo al KVM (originalmente desarrollado por Sun, ahora Oracle), es decir, dirigido a dispositivos integrados con recursos limitados. Squawk también está inspirado por Klein. A diferencia de Maxine, tiene una pequeña capa de abstracción escrita en C. Pero tenga en cuenta que Maxine necesita un sistema operativo para ejecutarse, mientras que Squawk se ejecuta sin un sistema operativo. Entonces, en cierto sentido, Squawk es incluso más puro que Maxine, porque muchas partes que no son parte de Maxine pero que forman parte del sistema operativo (donde a menudo se implementan en C, C++ u otros lenguajes de bajo nivel), en realidad son parte de Squawk. sí mismo. Los controladores de dispositivos, por ejemplo, están escritos en Java. Solo una pequeña capa de abstracción de hardware y bibliotecas de E/S se escriben en C.

+0

He encontrado proyectos similares siguiendo los enlaces de la página de preguntas frecuentes de Maxine VM: Joeq, OVM y Moxie. Joeq hace referencia a JavaInJava y Rivet System, a su vez. Muchas gracias por tu respuesta. – mschonaker

+0

Squawk acciona el SunSPOT –

6

Jikes RVM es una JVM escrita en Java, utilizada para investigación y mantenida en desarrollo activo.

1

JNode es un sistema operativo JVM + escrito en Java que ejecuta una PC x86 o virtual. El SVN del proyecto ha estado muy inactivo últimamente (aproximadamente los últimos 6 meses), pero creo que hay actividad en los espejos de GIT para el proyecto.

+0

La JVM es lo que puedo ver de cosecha propia, y necesita bastante memoria para funcionar bien. –

+0

@ ThorbjørnRavnAndersen - sí lo es. El núcleo de JNode JVM (incluido el JIT) y todas las funcionalidades del sistema operativo son de fabricación casera. Teóricamente se ejecuta en 256Mb, aunque esto no es realmente práctico. Una razón es que no usa memoria virtual. –