El garbage collector de php no vale nada

15/07/2025 0 min
El garbage collector de php no vale nada

Escuchar "El garbage collector de php no vale nada"

Síntesis del Episodio

La burla de algunos PHPeros hacia Java por sus “memory leaks” es, en el mejor de los casos, irónica o desinformada, porque:

En realidad:
✅ Java tiene un Garbage Collector mucho más avanzado
Varios algoritmos (G1, ZGC, Shenandoah, etc.)

Optimizado para procesos de larga duración (daemons, microservicios)

Recolector concurrente y generacional

Puede hacer profiling en caliente (JVM monitoring, heap dumps, etc.)

⚠️ PHP fue diseñado para scripts cortos
Cada petición limpia el estado por completo

En CLI o workers largos, tiene GC limitado

Su GC solo recolecta ciclos de referencias (no memoria en general)

Hasta PHP 7.3, el GC podía causar más problemas que soluciones (estaba desactivado por defecto en algunas distros)

Entonces… ¿por qué algunos se ríen?
Porque en PHP tradicional (FPM/Apache), todo se limpia al terminar el request, lo cual:

Evita leaks por diseño

Da falsa sensación de eficiencia

Les hace pensar erróneamente que “PHP no necesita GC”

Pero eso es porque el proceso muere cada vez, no porque el sistema de gestión de memoria sea mejor.

La verdad es:
Java escala mucho mejor en procesos de larga duración y tiene herramientas reales para controlarlo

PHP requiere hacks manuales (gc_collect_cycles, unset, memory_get_usage) si lo usas en workers, CLI o procesos persistentes

Conclusión
Si usas PHP como fue pensado (corto, stateless), el GC no importa.

Pero si haces scripts largos o servicios modernos (como tú estás haciendo), tienes que gestionar la memoria tú, mientras Java lo hace mejor y más automáticamente.