常用鏈接

          統(tǒng)計

          最新評論

          How does Python manage memory?(http://docs.python.org/3.1/faq/design.html)

          The details of Python memory management depend on the implementation. The standard C implementation of Python uses reference counting to detect inaccessible objects, and another mechanism to collect reference cycles, periodically executing a cycle detection algorithm which looks for inaccessible cycles and deletes the objects involved. The gc module provides functions to perform a garbage collection, obtain debugging statistics, and tune the collector’s parameters.

          Jython relies on the Java runtime so the JVM’s garbage collector is used. This difference can cause some subtle porting problems if your Python code depends on the behavior of the reference counting implementation.

          Sometimes objects get stuck in tracebacks temporarily and hence are not deallocated when you might expect. Clear the tracebacks with:

          import sys
          sys.exc_clear()
          sys.exc_traceback = sys.last_traceback = None
          

          Tracebacks are used for reporting errors, implementing debuggers and related things. They contain a portion of the program state extracted during the handling of an exception (usually the most recent exception).

          In the absence of circularities and tracebacks, Python programs need not explicitly manage memory.

          Why doesn’t Python use a more traditional garbage collection scheme? For one thing, this is not a C standard feature and hence it’s not portable. (Yes, we know about the Boehm GC library. It has bits of assembler code for most common platforms, not for all of them, and although it is mostly transparent, it isn’t completely transparent; patches are required to get Python to work with it.)

          Traditional GC also becomes a problem when Python is embedded into other applications. While in a standalone Python it’s fine to replace the standard malloc() and free() with versions provided by the GC library, an application embedding Python may want to have its own substitute for malloc() and free(), and may not want Python’s. Right now, Python works with anything that implements malloc() and free() properly.

          In Jython, the following code (which is fine in CPython) will probably run out of file descriptors long before it runs out of memory:

          for file in <very long list of files>:
          f = open(file)
          c = f.read(1)
          

          Using the current reference counting and destructor scheme, each new assignment to f closes the previous file. Using GC, this is not guaranteed. If you want to write code that will work with any Python implementation, you should explicitly close the file; this will work regardless of GC:

          for file in <very long list of files>:
          f = open(file)
          c = f.read(1)
          f.close()
          

          posted on 2009-11-30 11:01 九寶 閱讀(293) 評論(0)  編輯  收藏 所屬分類: Python

          主站蜘蛛池模板: 曲沃县| 曲水县| 龙南县| 扎鲁特旗| 定州市| 琼海市| 丹阳市| 兖州市| 施秉县| 融水| 禄劝| 临猗县| 吉水县| 呼玛县| 沁阳市| 梁山县| 封丘县| 上饶县| 读书| 嘉荫县| 尚志市| 子长县| 合山市| 闽清县| 庆安县| 浦东新区| 灵台县| 洛扎县| 绍兴市| 宜良县| 玉溪市| 哈尔滨市| 凭祥市| 乌鲁木齐县| 博爱县| 耒阳市| 达孜县| 镇沅| 策勒县| 巴马| 天祝|