¿Por qué Python no tiene hilo recolector de basura?

Java tiene un hilo de daemon para monitorear el uso de la memoria y hacer la tarea gc. De jstack veo

"main" #1 prio=5 os_prio=0 tid=0x00007f34b000e000 nid=0x808 waiting on condition [0x00007f34b6f02000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) .... "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f34b0023000 nid=0x809 runnable "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f34b0024800 nid=0x80a runnable "GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007f34b0026800 nid=0x80b runnable 

Pero hablando de python, escribí un

 #!/usr/bin/env python import gc import time gc.enable() while True: print "This prints once a minute." time.sleep(60) 

Vi que el proceso de python tiene un solo hilo,

 $ cat /proc/1627/status Name: python ... Threads: 1 

La pregunta es, ¿por qué python no tiene un hilo gc como Java? Entonces, ¿qué hilo hace la tarea gc?

Si inicia java con las -XX:+UseSerialGC , no verá ningún hilo GC. Para un solo hilo, la aplicación de algoritmo GC se puede utilizar para realizar actividades de GC.

Hilos dedicados requeridos para

  • GC paralelo (necesitas más de un solo hilo)
  • GC concurrente (actividades de GC que se ejecutan en paralelo con la lógica de la aplicación)