In che modo le implementazioni JVM come Jython e JRuby possono battere le loro controparti native?

StackOverflow https://stackoverflow.com/questions/3488675

Domanda

Stavo guardando questo video Qui, dove Robert Nicholson discute di P8, un'implementazione di PHP sulla JVM.Ad un certo punto afferma che mirano a superare il PHP nativo in termini di prestazioni in futuro.

Menziona JRuby e Jython, che hanno iniziato più lentamente delle loro controparti native, ma alla fine li hanno superati.Quercus, un altro interprete PHP sulla JVM afferma di esserlo 4 volte più veloce di mod_php ed è anche degno di nota.

Ciò significa che l'idea generale che la JVM sia più lenta di C è sbagliata o ci sono difetti nelle implementazioni C originali?

È stato utile?

Soluzione

Ciò significa che l'idea generale che la JVM sia più lenta di C è sbagliata o ci sono> difetti nelle implementazioni C originali?

Un po 'di entrambi

La JVM esiste da molto tempo e ha compiuto progressi significativi in ​​termini di efficienza.La garbage collection, il jitting, il caching e altre aree sono più avanzate rispetto alle implementazioni di "riferimento" come PHP.

Chiunque dia un'occhiata sotto il cofano di PHP capirà perché i miglioramenti in termini di efficienza sono facili da ottenere.

Personalmente dubito che la JVM possa sovraperformare CPython ...Ma potrei sbagliarmi ... Lo sono, questo dipende dal fatto che JVM GC è più veloce e anche IronPython.I miglioramenti delle prestazioni possono essere dovuti alla non dipendenza dallo stack di chiamate C come in Python stackless. Lo afferma il sito Jython

Jython è veloce all'incirca quanto CPython: a volte più veloce, a volte più lento.Poiché la maggior parte delle JVM, certamente quelle più veloci, funzionano a lungo, l'hot code verrà eseguito più velocemente nel tempo.

Ciò che posso applicare come dato di fatto poiché la JVM raggiungerà i livelli di prestazioni C man mano che le cache vengono generate e così via, sostanzialmente negano gli aspetti di livello superiore del codice di implementazione della VM (gran parte del quale è comunque scritto in C)

In molti linguaggi interpretati come PHP e Python sono solo ponti verso chiamate C equivalenti e immersioni nel codice macchina.Nella JVM, il Jitter esegue una funzione simile riducendo il bytecode agli equivalenti del codice macchina.Alla fine, le rappresentazioni intermedie come la sintassi di alto livello e il bytecode vengono solitamente ridotti comunque a operazioni della CPU a velocità C o più veloci...quindi è tutto uguale, giusto più passaggi intermedi che influisce solo sulla latenza alla massima efficienza durante il caricamento di un nuovo codice.Arriva un punto in Ram in cui dici "Qual è la vera differenza?" E la risposta è solo il processo che lo porta lì e la rappresentazione finale che determina la velocità dell'avvolgimento dello stack, gli algoritmi di raccolta della spazzatura, l'utilizzo del registro e la rappresentazione logica come l'aritmetica.

Altri suggerimenti

Non è troppo difficile. Se si scrive l'implementazione in C si deve scrivere il proprio GC, JIT e più (da veloce ed efficiente). Per fare questo veramente buono è necessario persone veramente intelligenti con un sacco di esperienza e di dare loro un sacco di tempo.

andrò su un arto qui e dire che l'attuale implementazione di PHP (non si basa non sulla conoscenza del funzionamento interno, ma piuttosto sui benchmark che ho visto e sulle persone roba che sanno di più su PHP mi ha detto) non è stato della tecnica. Facebook cerca di affrontare questo, ma lo fanno in un modo non comune (a causa di là bisogni speciali e l'utilizzo tipico di PHP Vedere http://www.stanford.edu/class/ee380/Abstracts/100505.html ).

Riepilogo: Quindi, se qualcuno implementa PHP in java (o su qualsiasi veloce VM) non ha bisogno di scrivere un super GC o JIT per essere veloce "solo" un compilatore (che può essere semplice).

Ci sono alcuni suggerimenti su ciò che la macchina virtuale fa qui . Ad esempio, sembra che i Java Virtual Machine prima controlla quali parti del bytecode vengono eseguite più volte e poi compila le parti pertinenti in codice nativo (che poi dovrebbe poi eseguire con velocità simile a codice C per esempio compilato).

A proposito, fa PHP compilazione in bytecode o è solo interpretato utilizzando una struttura di dati in memoria? Traducendo PHP dapprima in eseguibile bytecode dalla macchina virtuale Java, uno benefici automaticamente dalle attuali ottimizzazioni (lingua-agnostic) di esecuzione bytecode.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top