Optimización de código
🔥 Object Pooling (Pool de Objetos)
El Object Pooling es un patrón de optimización que reutiliza objetos en lugar de crearlos y destruirlos repetidamente, reduciendo el costo de la memoria y el procesamiento.
🚀 ¿Por qué usar un Pool de Objetos?
- Evita la creación y destrucción repetitiva de objetos.
- Mejora el rendimiento en aplicaciones con objetos costosos (como conexiones a bases de datos o sprites en juegos).
- Reduce el impacto del Garbage Collector, evitando que se acumulen objetos temporales.
🚫 Ejemplo Malo (Sin Pool de Objetos)
1class Conexion { 2 public Conexion() { 3 System.out.println("Nueva conexión creada"); 4 } 5} 6 7public class Main { 8 public static void main(String[] args) { 9 for (int i = 0; i < 5; i++) { 10 Conexion conexion = new Conexion(); // Crea un objeto nuevo cada vez 11 } 12 } 13}
✅ Ejemplo Optimizado (Con Pool de Objetos)
✅ Mejoras:
- Menos objetos creados dinámicamente.
- Ahorro de memoria y CPU.
- Optimiza la memoria almacenando conexiones en un pool.
- Menos impacto en el rendimiento.
- Ideal para escenarios de alta concurrencia.
1import java.util.Queue; 2import java.util.LinkedList; 3 4class Conexion { 5 public Conexion() { 6 System.out.println("Nueva conexión creada"); 7 } 8} 9 10class ConexionPool { 11 private static final Queue<Conexion> pool = new LinkedList<>(); 12 13 public static Conexion obtenerConexion() { 14 if (pool.isEmpty()) { 15 return new Conexion(); // Si no hay en el pool, crea una nueva 16 } 17 return pool.poll(); // Reutiliza una conexión existente 18 } 19 20 public static void devolverConexion(Conexion conexion) { 21 pool.offer(conexion); // Devuelve la conexión al pool 22 } 23} 24 25public class Main { 26 public static void main(String[] args) { 27 Conexion conexion1 = ConexionPool.obtenerConexion(); 28 ConexionPool.devolverConexion(conexion1); 29 30 Conexion conexion2 = ConexionPool.obtenerConexion(); // Reutiliza la anterior 31 } 32}