Estoy muy familiarizado con el concepto de agrupación de objetos y siempre trato de usarlo tanto como sea posible.
Además, siempre pensé que la agrupación de objetos es la norma estándar, ya que he observado que tanto Java como los otros marcos usan la agrupación tanto como sea posible.
Recientemente, aunque leí algo que era completamente nuevo (¿y contra intuitivo?) Para mí.
Esa agrupación en realidad empeora el rendimiento del programa, especialmente en aplicaciones concurrentes, y es aconsejable instanciar new
objetos en su lugar, ya que en las JVM más nuevas, la creación de instancias de un objeto es realmente rápida.
Leí esto en el libro: Java Concurrency in Practice
Ahora estoy empezando a pensar si estoy entendiendo mal algo aquí, ya que la primera parte del libro aconseja utilizar Executors
esa reutilización en Thread
lugar de crear nuevas instancias.
Entonces, ¿la agrupación de objetos ha quedado obsoleta hoy en día?
fuente
La respuesta a la pregunta concreta: "¿La agrupación de objetos es una técnica obsoleta?" es:
No. La agrupación de objetos se usa ampliamente en lugares específicos: agrupación de subprocesos, agrupación de conexiones de bases de datos, etc.
La creación general de objetos nunca ha sido un proceso lento. La agrupación en sí misma consume recursos: memoria y potencia de procesamiento. Cualquier optimización es una compensación.
La regla es:
¡La optimización prematura es malvada!
Pero, ¿cuándo es prematura una optimización dada?
La optimización prematura es cualquier optimización realizada, antes de que haya descubierto un cuello de botella a través de un perfil completo .
fuente
En situaciones en las que desea evitar la recolección de basura por completo, creo que la agrupación de objetos es la única alternativa viable. Entonces no, no es una técnica obsoleta.
fuente
Medida
Depende completamente de su caso de uso, el tamaño de sus objetos, su JVM, sus opciones de JVM, qué GC ha habilitado y una gran cantidad de otros factores.
En resumen: mida antes y mida después. Suponiendo que está utilizando un marco de agrupación de objetos (como el de Apache), no debería ser demasiado doloroso intercambiar entre implementaciones.
Consejo de prueba de rendimiento adicional: deje que la JVM se caliente un poco primero, ejecute las pruebas en una JVM en ejecución varias veces, puede comportarse de manera diferente.
fuente
Depende del contexto.
fuente
No sé si hay una tendencia cambiante aquí, pero ciertamente será el caso de que dependa . Si su clase Java está administrando un recurso externo, como una conexión RMI o cargando un archivo de recursos, etc., entonces ciertamente los costos para la creación de instancias de objetos aún pueden ser altos (¡aunque esos recursos ya pueden estar agrupados para usted!). Como práctica general, estoy de acuerdo con el libro.
fuente