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?

  1. Evita la creación y destrucción repetitiva de objetos.
  2. Mejora el rendimiento en aplicaciones con objetos costosos (como conexiones a bases de datos o sprites en juegos).
  3. 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}