¿Se compilan las lambdas de Java 8 como clases internas, métodos u otra cosa? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
¿Cómo se compilarán las funciones lambda de Java? 2 respuestasHoy he leído este artículo sobre lambdas:
http://www.infoq.com/articles/Java-8-Lambdas-A-Peek-Under-the-Hood
El artículo sugiere que las lambdasno son implementado como anon clases internas (debido al rendimiento). Da un ejemplo de que una expresión lambda puede compilarse como un método de clase (estático).
He probado un fragmento muy simple:
private void run() {
System.out.println(this);
giveHello(System.out::println);
}
private void giveHello(Consumer<String> consumer) {
System.out.println(consumer);
consumer.accept("hello");
}
y la salida es:
sample.Main@14ae5a5
sample.Main$Lambda$1/168423058@4a574795
hello
Entonces no es la misma instancia. Tampoco es una instancia central de "Fábrica Lambda".
¿Cómo se implementan las lambdas entonces?