天天看點

python垃圾回收&緩存機制

1.垃圾回收機制?

    計數器為主,标記清楚和分代回收為輔;

    1.1底層結構

      所有的對象都會放在refchain的雙向循環連結清單中。

        每一個對象都等于結構體

        typedef obj{

          上一個指針

          下一個指針

          引用個數

          數值類型

          值

         }

    1.2計數器

      建立的時候計數器為1

      被引用,則計數器加一

      删除引用,則計數器減一

      bug:循環引用會有問題?

          a = []

          b = []

          a.append(b)

          b.append(a)

          del a

          del b

    1.3标記清除

      會把有循環引用的對象放在另外一個雙向循環連結清單中,

      某種條件會觸發,去掃描,如果存在循環引用,則計數器-1

      bug:

        什麼時候掃描

        掃描代價太大

    1.4分代回收

      将标記清楚的連結清單  變成三個連結清單

      0代:對象有700個掃描一次

      1代:0代掃描10次則觸發

      2代:1代掃描10次則觸發

2緩存機制:

  2.1緩存池(整形,字元):【-5,257】都是常用的不會建立對象,都會在小資料池

  2.2free_list(字典,清單,元組,字元串)(有個數限制):當對象成為垃圾的時候不會被清除,而會放在free_list裡面,等下次用的時候,

繼續閱讀