¿Java8 lambdas mantiene una referencia a su instancia de inclusión como clases anónimas?
Sabemos que las clases anónimas mantienen una referencia a su instancia de inclusión y que esto puede conducir a fugas de contexto en Android.
Dado que retrolambda retroporta lambdas a Java7, podría valer la pena intentarlo.
Parece que Java8 lambdas no tiene este problema, pero no puedo encontrar ninguna información oficial al respecto.
¿Alguna pista?2 answers
Aquí hay algo de información.
Desde el siguiente enlace http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html: Esto tiene una implicación beneficiosa para la gestión de la memoria: mientras que las instancias de clase interna siempre tienen una referencia fuerte a su instancia que encierra, las lambdas que no capturan miembros de la instancia que encierra no tienen una referencia a ella. Esta característica de las instancias de clase interna a menudo puede ser una fuente de fugas de memoria (el llamado oyente caducado problema)
También puedes ver http://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.html del texto: Clase anidada: Úselo si sus requisitos son similares a los de una clase local, desea que el tipo esté más disponible y no requiere acceso a variables locales o parámetros de método.
Utilice una clase anidada no estática (o una clase interna) si necesita acceso a los campos y métodos no públicos de una instancia adjunta. Utilice una clase anidada estática si no requiere este acceso.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-08 10:28:39
Las expresiones Lambda y las referencias de métodos capturan una referencia a this
solo si es necesario, es decir, cuando se hace referencia a this
directamente o se accede a un miembro de instancia (que no esstatic
).
Por supuesto, si su expresión lambda captura el valor de una variable local y ese valor contiene una referencia a this
implica hacer referencia a this
también {
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-11 08:44:37