2010-10-08 14 views
11

Qualche tempo fa ho trovato il progetto MJVM. Purtroppo, questo progetto è stato abbandonato dall'autore (ho chiesto Igor via email).Implementazione Java di un ... JVM?

Mi chiedo se esiste un progetto (continua) open source di un'implementazione completa di una JVM in Java come questa.

Con "pieno", intendo, non solo per emulare i dispositivi mobili.

risposta

30

Jikes RVM è probabilmente l'implementazione JVM più importante scritta in Java. Tuttavia, la sua implementazione di livello più basso consiste semplicemente in chiamate di metodo statico a un'interfaccia "magica" che viene trattata appositamente dal compilatore e tradotta in codice nativo.

Il Maxine VM (sviluppato originariamente da Sun Labs, ora Oracle Labs) è un vero e proprio metacircular VM , in cui non solo tutto ciò che è scritto in Java, ma non v'è alcuna speciale involucro nel compilatore in corso. Ancor più: non solo la VM Maxine è scritta in Java, ma funziona anche con lo di per sé! Questo potrebbe sembrare folle e, per essere sincero, non ho idea di come funzioni, ma è basato sullo Klein VM (sviluppato da Sun Labs) che fa la stessa cosa per il linguaggio di programmazione Self.

Questo ha alcune proprietà molto interessanti: poiché la JVM stessa fa parte della base di codici che la JVM interpreta, la stessa base di codici a cui appartiene il codice utente, ciò significa che può fare ottimizzazioni come l'inlining attraverso il limite della VM. IOW: può integrare il codice VM nel codice utente e viceversa. Significa anche che la VM stessa è soggetta alle stesse ottimizzazioni di runtime e ottimizzazioni dinamiche che   – su altre VM (anche includendo Jikes)   – solo il codice utente è, il che significa che la VM stessa viene costantemente ricompilata e ri ottimizzato per adattarsi ai carichi variabili, caricare nuove classi, modificare i profili, modificare i modelli di utilizzo e così via.

Su macchine virtuali come HotSpot, JRockit, J9 e altri, queste ottimizzazioni sono impossibili, per il semplice motivo che la JVM sa solo come ottimizzare il bytecode JVML, ma la VM non è scritta in Java. Ma anche in Jikes, questo non è possibile perché, mentre la VM è scritta in Java, viene staticamente compilata nel codice nativo prima dello e il codice della VM stessa non fa parte del codice che la VM "vede ".

Lo Squawk VM è anche una JVM sviluppata da Sun Labs, ora Oracle Labs. A differenza di Maxine, che è approssimativamente simile a J9, HotSpot o JRockit nel suo pubblico di destinazione, Squawk è più simile al KVM (originariamente sviluppato da Sun, ora Oracle), ovvero indirizzato ai dispositivi embedded con risorse limitate. Squawk è anche ispirato da Klein. A differenza di Maxine, ha un piccolo livello di astrazione scritto in C. Ma tieni a mente che Maxine richiede l'esecuzione di un sistema operativo, mentre Squawk funziona senza un sistema operativo. Quindi, in un certo senso, Squawk è persino più puro di Maxine, perché molte parti che non fanno parte di Maxine ma fanno parte del sistema operativo (dove sono spesso implementate in C, C++ o altri linguaggi di basso livello), sono in realtà parte di Squawk si. I driver di dispositivo, ad esempio, sono scritti in Java. Solo un piccolo livello di astrazione hardware e le librerie I/O sono scritte in C.

+0

Ho trovato progetti simili a seguito dei collegamenti alle pagine delle FAQ di Maxine VM: Joeq, OVM e Moxie. Joeq fa riferimento a JavaInJava e Rivet System, a sua volta. Grazie mille per la tua risposta. – mschonaker

+0

Squawk alimenta il SunSPOT –

6

Jikes RVM è una JVM scritta in Java, utilizzata per la ricerca e mantenuta in sviluppo.

1

JNode è un sistema operativo JVM + scritto in Java che esegue un PC x86 nudo o virtuale. L'SVN del progetto è stato piuttosto inattivo di recente (all'incirca negli ultimi 6 mesi), ma credo che ci sia attività nei mirror GIT per il progetto.

+0

La JVM è il più lontano possibile da casa e ha bisogno di un bel po 'di memoria per funzionare bene. –

+0

@ ThorbjørnRavnAndersen - sì lo è. Il core JVM JNode (incluso il JIT) e tutte le funzionalità del sistema operativo sono sviluppate internamente. Funziona nozionalmente su 256 Mb, anche se questo non è veramente pratico. Una ragione è che non usa la memoria virtuale. –