變量是存放在內存當中的
定義變量在運行時會在電腦內存中申請一塊獨立的內存空間
java
一、在交互式模式下
Python實現int的時候有個小整數池。爲了不因建立相同的值而重複申請內存空間所帶來的效率問題, Python解釋器會在啓動時建立出小整數池,範圍是[-5,256],該範圍內的小整數對象是全局解釋器範圍內被重複使用,永遠不會被GC回收
每建立一個-5到256之間的整數,都是直接從這個池裏直接拿走一個值,例如
>>> y=4
>>> id(y)
4297641184
>>>
>>> x=3
>>> x+=1
>>> id(x)
4297641184
在pycharm中
但在pycharm中運行python程序,pycharm出於對性能的考慮,會擴大小整數池的範圍,其餘的字符串等不可變類型也都包含在內一便採用相同的方式處理了,咱們只須要記住這是一種優化機制,至於範圍到底多大,無需細究python
1.引用計數:內存中的數據若是沒有任何的變量名與其有綁定關係,那麼會被自動回收
2.標記清除:當內存快要被某個應用程序佔滿的時候,會自動觸發
3.分代回收:根據值得存活時間的不一樣,劃爲不一樣的等級,等級越高垃圾回收機制掃描的頻率越低
我的理解:
如今的高級語言如java,c#等,都採用了垃圾收集機制,而再也不是c,c++裏用戶本身管理維護內存的方式。本身管理內存極其自由,能夠任意申請內存,但如同一把雙刃劍,爲大量內存泄露,懸空指針等bug埋下隱患。
相似最近2天看的Go語言,它的垃圾回收機制就位有無用的變量垃圾就直接會報錯,並提示地點,因此垃圾回收機制是一個對於高級編程語言來說減小很大工做量和必定程度上增長開發效率和工做效率的一個機制.
1綁定變量第一沒有關係天然會被回收,
2變量會被標記,快滿時候,python底層會操做刪除多標記的無用垃圾
3青春代,中年代,老年代.大小自小到大,掃描時間由短到長,沒掃描出來多了垃圾會自動傳入下一個代
我的有個很酷的理解: 反向吃雞
前面比較安全 但也會被擊殺當作老年代狀態
後期圈小,毒圈也很危險,死亡率高 當作青春代
中期前兩個折中
對應分代回收的反向處境c++