¿Cómo pueden las implementaciones de JVM, como JRuby Jython y vencer a sus contrapartes nativas?

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

Pregunta

Yo estaba viendo el vídeo aquí , donde Robert Nicholson discute P8, una implementación de PHP en la JVM. En algún momento se menciona que su objetivo es superar el rendimiento de PHP nativo en algún momento en el futuro.

Menciona JRuby y Jython, que comenzó más lento que sus contrapartes nativas, pero con el tiempo los superó. Quercus, otro intérprete PHP en las reclamaciones de JVM para ser 4 veces más rápido que mod_php y es también vale la pena destacar.

¿Eso quiere decir que la idea general de que la JVM es más lento que C está mal, o hay defectos en las implementaciones originales C?

¿Fue útil?

Solución

  

¿Eso quiere decir que la idea general de que la JVM es más lento que C está mal, o hay> fallas en las implementaciones originales C?

un poco de ambos

La JVM ha existido desde hace mucho tiempo y ha hecho un progreso significativo en la eficiencia. La recolección de basura, jitting, almacenamiento en caché y otras áreas están más avanzados que en las implementaciones de referencia '', tales como PHP.

Cualquier persona que toma un vistazo bajo el capó de PHP se entiende por qué las ganancias de eficiencia son fáciles de lograr.

personalmente estoy dudoso que la JVM puede superar el CPython sin embargo ... pero podría estar equivocado ... soy, esto se debe a la JVM GC ser más rápido, y IronPython demasiado . Las mejoras de rendimiento pueden ser un no-dependencia de la pila de llamadas C, tales como en sin apilado Python. El sitio indica Jython

  

Jython es aproximadamente tan rápido como CPython - a veces más rápido, a veces lento. Debido> mayoría de las JVM - sin duda los más rápidos -. Qué larga duración, caliente del código se ejecutará más rápido tiempo extra

¿Qué puedo appricate como un hecho que la JVM alcanzar niveles de rendimiento C como cachés generan y así sucesivamente básicamente niegan los aspectos de mayor nivel en el código de aplicación VM (una gran parte de la cual está escrito en C de todos modos)

En muchos lenguajes interpretados como PHP y Python son sólo los puentes a las llamadas equivalentes C y se sumerge en código máquina. En la JVM, el Jitter realiza una función similar mediante la reducción del código de bytes a equivalentes de código de máquina. Con el tiempo, las representaciones intermedias tales como la sintaxis de alto nivel y el código de bytes se reduce generalmente a C-velocidad o las operaciones de CPU más rápida de todos modos ... lo que es lo mismo, sólo más pasos intermedios , que sólo afecta la latencia a pleno rendimiento al cargar nuevo código. Llega un punto en la memoria RAM en el que dice "¿cuál es la diferencia real?" y la respuesta es sólo el proceso que lo consigue allí y la representación final que determina la velocidad de la pila de bobinado, los algoritmos de recolección de basura, regístrese uso y representación lógica tal como la aritmética.

Otros consejos

No es demasiado duro. Si escribe su aplicación en C que tiene que escribir su propia GC, JIT y más (para ser rápido y eficiente). Para hacer eso muy bien lo que necesita gente muy inteligente, con mucha experiencia y darles un montón de tiempo.

Me va a salir en un miembro aquí y decir que la implementación actual de PHP (no se basa no en el conocimiento del funcionamiento interno sino más bien en los puntos de referencia que he visto y en cosas que la gente que sabe más acerca de PHP me dijeron) no es estado de la técnica. Facebook intenta hacer frente a este, pero lo hacen de una manera poco frecuente (por ahí necesidades especiales y el uso típico de PHP consulte http://www.stanford.edu/class/ee380/Abstracts/100505.html ).

Resumen: Así que si alguien implementos PHP en Java (o en cualquier VM rápido) que no necesita escribir un super GC o JIT que ser rápido "sólo" un compilador (que puede ser simple).

Hay algunas pistas sobre lo que hace la máquina virtual aquí . Por ejemplo, parece que la máquina virtual comprueba primero Java que partes del código de bytes se ejecutan con más frecuencia y, a continuación compila las partes pertinentes en código nativo (que a continuación, a continuación, debe ejecutar con velocidad similar como código C por ejemplo compilado).

Por cierto, hace PHP de compilación en bytecode o es sólo interpretarse utilizando una estructura de datos en memoria? Al traducir por primera vez en PHP ejecutable de código de bytes por la máquina virtual de Java, uno se beneficia automáticamente de las optimizaciones existentes (independiente del idioma) de la ejecución de código de bytes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top