为什么python没有垃圾收集器线程?

时间:2016-07-29 06:05:09

标签: python garbage-collection

Java有守护程序线程来监视内存使用情况并执行gc任务。从jstack我看到

"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

但是谈到python,我写了一个

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

我看到python进程只有一个线程,

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

问题是,为什么python没有像Java这样的gc线程?然后哪个线程执行gc任务?

1 个答案:

答案 0 :(得分:2)

如果使用-XX:+UseSerialGC选项启动java,则不会看到任何GC线程。 对于单线程GC算法,应用程序线程可用于执行GC活动。

所需的专用线程
  • 并行GC(您需要的不仅仅是单线程)
  • 并发GC(与应用程序逻辑并行运行的GC活动)