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裡面,等下次用的時候,