¿Hay una estimación que indique cuánto afectará JSR-292 al rendimiento de Groovy?¿Cuánto le hará JSR-292 (invookedynamic) al rendimiento de Groovy?
Respuesta
invokedynamic es realmente una historia complicada, ya que las características de rendimiento cambian todo el tiempo en JDK7. Durante la migración de Groovy a indy llegué realmente, muy cerca de Java, al factor 1.5. Pero tengo que usar catchExceptionGuard, que reduce el rendimiento a algo así como ser factor 3-4. Todavía tenemos que investigar formas de evitar tener que usar ese guardia. Quizás tendremos que romper algún código existente en Groovy 2.2 para eso. De todos modos, no necesito el protector para invokeMethod fallback como se mencionó anteriormente. Es para GroovyRuntimeExceptions que posiblemente contenga otras excepciones, que tengo que desenvolver o hacer otras cosas. Entonces, el rendimiento teórico posible parece ser entre Java y la mitad de la velocidad de Java para los métodos existentes. La realización de llamadas a invokeMethod es una historia completamente diferente.
Si necesita más, utilice @CompileStatic en Groovy 2.0.
No creo que hay un punto de referencia, sin embargo, y hasta que alguien lo realiza sólo podemos adivinar ...
Usted puede encontrar this post en este asunto interesante.
Sería alrededor de 10-50 veces más rápido en general.
¿Puede respaldar eso? con algunas referencias o evidencia? –
Hola, He agregado el enlace. Se basa en mi propia experiencia de crear un compilador Groovy sobre JSR-292. Y básicamente, es una estimación (ya que la pregunta también ha pedido la estimación;) – chanwit
Realmente engañoso. De hecho, tengo una ralentización de 5x con indy habilitado. – Renato
No estoy seguro de cuánto es aplicable a Groovy. Si recuerdo bien, Groovy tiene algunos inconvenientes (por ejemplo, el método invokeMethod). No es posible usar simplemente el respaldo con invokedynamic, creo.
Sin embargo, hay algunas maneras:
- detectar la excepción que se inicia cuando no se encuentra el método. Desafortunadamente, probablemente sea necesario analizar stacktrace, porque no puede estar seguro de dónde se arroja. Esto puede ser una ralentización significativa cuando se llama a un método no existente, independientemente de que sea manejado por invokeMethod callback.
- Mira a Groovy ++. Le permite usar tipeo estático si satisface algunas restricciones. En tal caso, puede ser posible permitirle cambiar a un "modo dinámico estricto", que no permite estos retrocesos.
- 1. groovy 'switch' vs. 'if' rendimiento
- 2. ¿Cómo le digo a gdb cuánto dura mi matriz de longitud cero?
- 3. Use invookedynamic para implementar despacho múltiple
- 4. Git push no hará nada (Todo al día)
- 5. operador groovy^
- 6. groovy: ¿Cómo acceder al archivo de propiedades?
- 7. ¿Cuánto tiempo le lleva a una aplicación de iOS reconocer un cambio en el DNS?
- 8. Groovy *. Operadores
- 9. Rendimiento de rendimiento del rendimiento: en Smalltalk (específicamente Squeak)
- 10. Rendimiento de la aplicación Phonegap frente al rendimiento de la aplicación nativa
- 11. Bajo C# cuánto de un impacto en el rendimiento es un intento, lanzar y bloque catch
- 12. ¿Cuál es el equivalente de Groovy al dir de Python()?
- 13. ¿Cómo verificar qué URL hará un RedirectToRouteResult?
- 14. El audio hará que AVCaptureSession termine
- 15. ¿Cuánto miden exactamente los contadores de rendimiento .NET de la memoria .NET "Gen X Heap Size"?
- 16. ¿Cuánto impacto tiene el uso de 'var' en el rendimiento del compilador de C#?
- 17. cómo deshacerse de "nulo" al concatar cadena en Groovy?
- 18. Groovy remove Artículo de la colección al iterar
- 19. ¿Qué le pasó a Maven Polyglot?
- 20. Constructores Groovy
- 21. Conversión de tipo Groovy
- 22. Rendimiento del elenco de size_t al doble
- 23. ¿Problema de rendimiento al usar SELECT *?
- 24. Delphi - ¿Cómo le digo al sistema qué impresora usar?
- 25. Cassandra o SOLR? ¿Qué le da un mejor rendimiento a las consultas de lectura frond end?
- 26. Integración de Groovy con Java
- 27. Groovy Concepto de cierre
- 28. ¿Cuánto se utiliza PhoneGap?
- 29. ¿Cuánto hay para LINQ?
- 30. lo que hará la máquina virtual Java al ejecutar múltiples aplicaciones java
Parece que todavía hay un largo camino por recorrer para obtener el código Groovy para obtener cierto beneficio de rendimiento de invocada dinámica. Mi algoritmo genético se realizó 5 veces más lento con invookedynamic habilitado, ¡y lo probé con Java 1.8.0 y Groovy 2.2.1! Puede intentarlo usted mismo, solo clone esto: https://github.com/renatoathaydes/MachineLearning y ejecute la prueba 'com.athaydes.ml.algorithms.LinearGPTest :: testNonTrivialPrograms'. Funciona en 4 segundos normalmente, pero con groovy-indy e invookedynamic, se ejecuta en al menos 25 segundos. – Renato
Otra publicación que también mostró Indy realmente puede ralentizar su código de Groovy: http://derjan.io/blog/2012/08/08/first-steps-with-groovys-invokedynamic-support/ – Renato