Primera ley de optimización: no lo hagas. Segunda ley: no lo hagas a menos que hayas medido y sepas de hecho que necesitas optimizar y dónde.
Solo si los objetos son realmente caros de crear, y si realmente se pueden reutilizar (puede restablecer el estado con solo operaciones públicas a algo que pueda reutilizarse) puede ser efectivo.
Las dos ganancias que menciona no son realmente ciertas: la asignación de memoria en java es gratis (el costo fue cerca de 10 instrucciones de CPU, que no es nada). Por lo tanto, reducir la creación de objetos solo le ahorra el tiempo invertido en el constructor. Esto puede ser una ganancia con objetos realmente pesados que pueden reutilizarse (conexiones de bases de datos, hilos) sin cambiar: reutiliza la misma conexión , el mismo hilo.
El tiempo del GC no se reduce. De hecho, puede ser peor. Con el movimiento de GC generacionales (Java es, o fue de hasta 1.5), el costo de una carrera de GC está determinado por la cantidad de objetos vivos, no por la memoria liberada.Los objetos vivos se moverán a otro espacio de la memoria (esto hace que la asignación de memoria sea tan rápida: la memoria libre es contigua dentro de cada bloque de GC) un par de veces antes de marcarse como antiguo y moverse al espacio de memoria de la generación anterior.
Los lenguajes de programación y soporte, como GC, se diseñaron teniendo en cuenta el uso común. Si te alejas del uso común en muchos casos, es posible que te resulte más difícil leer el código que es menos eficiente.
Los comentarios parecen negativos, pero estaba considerando algo similar. Tengo una aplicación j2me que crea miles de pequeños objetos de cuadro delimitadores latentes. Si puedo crear un grupo de ellos, entonces le daré al GC un trabajo más fácil más adelante. Me pregunto si esto sigue siendo una mala idea en el limitado mundo de los móviles. – izb
Pool objetos costosos solamente (como conexiones de bases de datos y tal). La definición de "caro" depende en gran medida de sus requisitos. –