Estoy creando un nuevo presentador de este modo:GWT recolección de elementos
new MyPresenter(new MyView());
Se registra algunos controladores de eventos y se une a la vista y tal. Eventualmente, podría "cerrar" esa vista para que el navegador ya no la represente. No estoy manteniendo una referencia a esta instancia de MyPresenter
en cualquier lugar.
En los foros de Google sobre este tema, la respuesta convencional es "configurar sus referencias a nulo" y luego no se preocupe por ello. A diferencia de Javascript, no puedo simplemente decir this = null;
en Java por razones obvias. Pero en Javascript, es muy fácil anular referencias de objetos que sé que ya no se usarán.
Mi pregunta: ¿Cómo puedo saber si este presentador ha sido recolectado como basura, ya que no mantengo una referencia al mismo? Es muy claro que existe. ¿Debo tener fe en que GWT y JS se encargarán de esto? ¿O debo mantener mi propia referencia en MyPresenter
para poder hacerlo manualmente al null
cuando termine?
Depende del navegador. Básicamente, si no tiene referencias a los objetos, se recopilará, pero hay errores, como el famoso error en IE con referencias cruzadas entre los objetos DOM y JS (los componentes predeterminados en GWT generalmente están protegidos de esto), o algunos recolectores de basura no pudieron eliminar islas de objetos Como hay muchos navegadores, no existe un truco o herramienta universal para combatir este problema. La única opción es ejecutar pruebas de rendimiento y verificar el uso de la memoria. – jusio
No ** nunca ** tengo una referencia a ese objeto desde mi código (usuario), sin embargo, es probable que exista porque puede manejar eventos si los disparo. Sin embargo, si elimino estos manejadores de eventos y anulo 'MyView' es suficiente para hacer que sea GC'd? Mi temor es que no lo sea. –
@TravisWebb it * debe ser * suficiente. Pero los accidentes ocurren. No puedo encajar en uno comentarios todos los errores relacionados con GC, pero suceden desde el momento. Si elimina todas las referencias al objeto, debe recopilarse (agregar algo como detector de eventos, contar como crear una referencia, ya que algún objeto en alguna parte debe saber dónde enviar eventos) – jusio