¿Qué optimizaciones de la función lambda, si las hay, están planeadas para Java 9 y posteriores? [cerrado]

8

Estoy trabajando en un proyecto de alto rendimiento en el que las funciones lambda de Java 8 son enormemente útiles. Sin embargo, he descubierto que son ineficientes en memoria cuando se usan en masa. Por ejemplo, supongamos que necesito aplicar una función lambda 1,000,000 veces:

for (int i = 0; i < 1_000_000; i += 1) {
  collection.forEach(thing -> thing.foo());
}

En esta forma, thing -> thing.foo() parece crear una instancia de 1,000,000 de objetos, lo que tiene ramificaciones de velocidad desagradables cuando se realiza repetidamente. Mi optimización estándar, donde fue necesario, ha sido realizar la siguiente refactorización:

Consumer<Thing> DoFoo = thing -> thing.foo(); 
for (int i = 0; i < 1_000_000; i += 1) {
  collection.forEach(DoFoo);
}

Esto elimina la sobrecarga de memoria y es trivial de hacer. Esto me lleva a mi pregunta: si algo tan simple resulta en tan grandes ganancias de rendimiento, ¿por qué el compilador de Java no realiza esta refactorización por mí? ¿Existen otras optimizaciones que podrían realizarse de modo que el rendimiento / gastos generales de Lambda sea más predecible y eficiente? Si es así, ¿se planea lanzar en futuras versiones? Las Lambdas han demostrado ser maravillosamente efectivas, pero cuando necesito preocuparme por las cosas de bajo nivel al usarlas, se degrada la utilidad de su abstracción.

    
pregunta Dylan Knowles 09.06.2016 - 04:42

0 respuestas

Lea otras preguntas en las etiquetas