2009-04-14 10 views
15

Dove differiscono le implementazioni JVM (eccetto le licenze)? Ogni JVM implementa la cancellazione del tipo per la gestione generica?Differenze tra le implementazioni JVM

Dove sono le differenze tra:

  • JRockit
  • IBM JVM
  • SUN JVM
  • Aprire JDK
  • Blackdown
  • Kaffe

.... Ne offre uno con Ottimizzazione chiamata di coda?

risposta

15

Le implementazioni JVM possono differire nel modo in cui implementano la compilazione JIT, le ottimizzazioni, la garbage collection, le piattaforme supportate, la versione di Java supportata, ecc. Tutti devono soddisfare set di funzionalità e comportamenti in modo che eseguano correttamente i bytecode Java.

Come hai sottolineato, la differenza principale tende ad essere nella concessione di licenze. Altre differenze non tecniche tendono ad essere in opzioni di supporto gratuite/a pagamento, integrazione con altre tecnologie (solitamente server J2EE) e accesso al codice sorgente.

Nota: Mentre un server J2EE gira su JVM, alcuni server sono gli strumenti per il monitoraggio, l'analisi e le prestazioni tweaking JVM integrata.

Per quanto riguarda le differenze tecniche, quelle sono diventate meno significative nel corso degli anni. Una volta, IBM e JRockit JVM avevano prestazioni di gran lunga superiori all'implementazione Sun di riferimento. Ciò era dovuto a differenze significative nei tipi di ottimizzazioni del runtime, differenze nella garbage collection e differenze nel codice nativo (e quanto codice nativo utilizza varie classi). Queste differenze di prestazioni non sono più così significative.

Alcuni di JVM includono anche o si integrano con la diagnostica e strumenti di monitoraggio. JRockit include un set di strumenti per il monitoraggio delle prestazioni JVM. Sun fornisce vari strumenti basati su JMX con funzioni sovrapposte per fare lo stesso. IBM Websphere una volta includeva un insieme simile di strumenti per l'intero server delle applicazioni J2EE (non sono sicuro che lo facciano ancora, ma presumo che sia ancora vero) ...

Alcune delle JVM open source tendono ad avere prestazioni un po 'più lente perché sono state ridisegnate da zero. In quanto tali, hanno un po 'di più da recuperare. L'ultima volta che ho controllato circa 2 anni fa, Blackdown era significativamente più lento (1.5x-2x?) Rispetto a Sun JVM. Era anche un po 'indietro rispetto alle versioni supportate di Java.

+0

Come qualcuno costretto a usare JRockit per oltre 5 anni, direi che nel complesso non è più veloce di Hotspot, ma sicuramente non è così robusto. Sacrificano l'affidabilità per la velocità e finiscono con niente. – erickson

+0

@erickson, Come qualcuno che ha utilizzato volontariamente JRockit per oltre 5 anni, posso dire che le tue esperienze non sono universali. JRockit ha salvato almeno una volta con il suo strumento di rilevamento perdite di memoria pure. :) Non ho avuto più crash con esso rispetto a Sun VM (anche se ce ne sono stati uno o due). – jsight

1

La compilazione JIT è una cosa che alcuni JVM: s non hanno.

+0

Cos'è il sole JVM? http://java.sun.com/javase/technologies/hotspot/ Sembra che il compilatore JIT di hotspot sia sorseggiato con ogni versione di JVM! –

+0

Non sono sicuro di cosa vuoi dire, ma sì, l'hotspot fa parte di Sun JVM. –

+0

Perché dici che evey JVM non ha la compilazione JIT quando fa parte della maggior parte delle JVM? Perché mi votate? –

1

Cose come la cancellazione di tipo vengono eseguite dal compilatore per essere compatibile con JVM anziani. La maggior parte delle JVM dovrebbe supportare tutte le funzionalità necessarie, ma alcune potrebbero essere più ottimizzate di altre. Immagino che Sun JVM sia probabilmente il più veloce.

1

Se la JVM sostiene di essere Java deve passare la TCK, fornendo un sacco di magazzino funcitonaltiy.

Le differenze sono in luoghi non core, come garbage collection, il jconsole/VisualVM al sole JVM, ecc preelaborazione


precisazione: TCK è la suite di test che una macchina virtuale deve passare per essere ufficialmente conforme a Java.

+0

Kit di compatibilità tecnologica. http://jcp.org/en/resources/tdk –

1

L'ottimizzazione coda chiamata non è ancora supportata da Java. John Rose sta conducendo degli sforzi per includerlo in una versione futura e ha descritto il numero approach, and some of the issues coinvolto.

+0

Ricordo sulle opzioni per Java6 (funzionalità sperimentali), forse Sun JDK lo supporta come sperimentale? Che ne pensi del "Da vinchi VM", ho sentito che dovrebbe supportare TCO! –

+0

Sì, il progetto da Vinci è orientato verso il supporto per altre lingue, ed è qui che il supporto viene prototipato. – erickson

+0

Una sorta di questa ottimizzazione (solo coda-ricorsione) è supportata da IBM JVM (qualcosa come un goto per l'inizio del metodo) –

1

Un'altra differenza tra JVM è il comportamento su API non documentata. (ad es. com.sun.xxx) Ad esempio, la JVM di Sun e la JVM di IBM hanno entrambi un comportamento leggermente diverso sulla gestione dei segnali. (La JVM di IBM non consente all'applicazione di intercettare il segnale "INT" in alcuni casi.)

1

JVM è come una macchina virtuale che funziona per caricare il varifier di classe e Bytcode, eseguire il codice. mentre l'interfaccia di programmazione di Applocaion è raccolta di pacchetti. e i pacchetti sono raccolta di classe. Il programma Java viene eseguito dove JVM è installato e funziona.