Frage

Ich war gerade dieses Video hier , wo Robert Nicholson P8 diskutiert, eine Implementierung von PHP auf der JVM. An einem gewissen Punkt erwähnt er, dass sie nativen PHP in Performance in der Zukunft einige Zeit zu übertreffen wollen.

Er erwähnt JRuby und Jython, die begann langsamer als ihre einheimischen Kollegen, aber schließlich übertroffen. Quercus, eine andere PHP-Interpreter auf der JVM Ansprüche sein 4x schneller als mod_php und ist auch im wert von Note.

Heißt das, dass die allgemeine Idee, dass die JVM ist langsamer als C falsch ist, oder gibt es Mängel in der ursprünglichen C-Implementierungen?

War es hilfreich?

Lösung

  

Heißt das, dass die allgemeine Idee, dass die JVM ist langsamer als C falsch ist, oder es gibt> Fehler in den ursprünglichen C-Implementierungen?

Bit A sowohl

Die JVM ist seit langer Zeit um und hat bedeutende Fortschritte bei der Effizienz gemacht. Die Garbage Collection, jitting, Caching und andere Bereiche sind weiter fortgeschritten als in 'Referenz' Implementierungen wie PHP.

Wer einen Blick unter die Motorhaube von PHP unter verstehen, warum Effizienzgewinne sind leicht zu erreichen.

Ich persönlich ist zweifelhaft, dass die JVM jedoch die CPython übertreffen kann ... aber ich könnte falsch sein ... ich bin, ist dies auf die JVM GC schneller ist, und Ironpython zu . Leistungsverbesserungen können ein Nicht-Vertrauen auf dem C Call-Stack sein wie in stackless Python. Die Jython Website heißt

  

ist Jython etwa so schnell wie CPython - mal schneller, mal langsamer. Weil> meisten JVMs - sicherlich die schnellsten sind -. Lange läuft, wird heiß laufen Code schneller Überstunden

Was ich als Tatsache wie die JVM appricate kann, wird C Leistungsniveau erreichen, wie Caches erzeugen und so weiter im Wesentlichen der höhere Ebene Aspekte des VM Implementierungscode negiert (ein großer Teil davon in C geschrieben ist sowieso)

In vielen interpretierten Sprachen wie PHP und Python sind nur Brücken zu äquivalenten C Anrufen und taucht in Maschinencode. In der JVM, führt die Schwankung eine ähnliche Funktion durch den Bytecode zu Maschinencode-Äquivalente zu reduzieren. Schließlich werden die Zwischendarstellungen wie die High-Level-Syntax und Bytecode in der Regel auf C-Geschwindigkeit reduziert oder schneller sowieso CPU-Operationen ... so ist es alle gleich, nur mehr Zwischenschritte , die nur wirkt die Latenzzeit auf volle Effizienz bei neuem Code zu laden. Es kommt ein Punkt in RAM, wo Sie sagen, „was der wirkliche Unterschied ist?“ und die Antwort ist nur der Prozess, der es dort und die endgültige Darstellung bekommt, die die Geschwindigkeit des Stapels bestimmt Wicklung, Garbage Collection-Algorithmen, registrieren Nutzung und Logikdarstellung wie Arithmetik.

Andere Tipps

Es ist nicht zu hart. Wenn Sie Ihre Implementierung in C schreiben Sie Ihre eigenen GC, JIT schreiben und mehr (zu schnell und effizient zu sein). Um sicherzustellen, dass wirklich gut zu tun Sie wirklich brauchen intelligente Menschen mit viel Erfahrung und geben ihnen viel Zeit.

werde ich auf ein Glied hier gehen und sagen, dass die aktuelle Implementierung von PHP (nicht beruht nicht auf der Kenntnis der inneren Arbeits sondern zu den Benchmarks ich gesehen habe, und auf Sachen Leute, die wissen mehr über PHP sagte mir) nicht Stand der Technik ist. Facebook versucht, dieses Problem anzugehen, aber sie tun es in einer ungewöhnlichen Art und Weise (wegen der dort besonderer Bedürfnisse und die typischen Verwendung von PHP finden Sie unter http://www.stanford.edu/class/ee380/Abstracts/100505.html ).

Zusammenfassung: Also, wenn jemand implementiert PHP in Java (oder auf einem schnellen VM) er braucht keine Super-GC oder JIT schnell zu sein „nur“ ein Compiler (was einfach sein kann) zu schreiben.

Es gibt einige Hinweise über das, was die virtuelle Maschine funktioniert hier . Zum Beispiel, es sieht aus wie die Java Virtual Machine überprüft zunächst, welche Teile der Bytecode am häufigsten ausgeführt werden, und stellt dann die entsprechenden Teile in nativen Code (die dann sollten dann mit ähnlicher Geschwindigkeit wie zum Beispiel kompilierte C-Code ausführen).

By the way, funktioniert PHP Kompilierung in Bytecode oder ist es nur interpretiert unter Verwendung eine In-Memory-Datenstruktur? PHP zuerst in Bytecode ausführbaren durch die virtuelle Java-Maschine, einen Nutzen automatisch aus den vorhandenen (sprachunabhängig) Optimierungen der Bytecode-Ausführung durch das Übersetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top