Python的内存管理

發布時間:2019-08-13 07:41:24編輯:auto閱讀(159)

        一直以為用Python、java這樣的語言就不在需要關心内存使用的問題,但事情還是發生了。
        前一段時間需要寫一個應用,需要将用戶删除的記錄在文件中的偏移記錄到另一個文件中,由于需要load的最大的數據文件也就1.2GB左右,而且系統的初始化設置在淩晨1點左右,做了個小測試,在幾秒鐘的時間可以load完數據并通過二分查找确定邊界初始化列表,看了看服務器内存還是很空閑的,就想偷個懶在内存中做二分查找。開始測試的時候找了個較小的數據文件一切都正常,但到了線上環境内存就一路狂升到1.3G左右停下,本以為是python内存洩露,但review了所有的代碼也沒有找到可疑的地方。将所有不用的變量del掉可是,難道垃圾回收沒起作用,通過sys.getrefcount來查看了可疑的變量的引用計數,内存還是沒有降下來,看來真是遇到詭異的事件了。
        在網上谷歌了一下python内存方面的文章,有篇網文寫到,python将不用的内存放到内存池而并不返回給操作系統。在這個絕望的時候也沒有别的辦法了,隻有試試這個方法了,那内存申請的大頭開刀吧!将二分查找放磁盤中來做,在将二分查找改為文件二分查找後内存僅僅占14MB左右。至此大功告成!
    回頭總結下以上遇到的問題,python作為動态語言為了保證效率的确可能将釋放的内存放到内存池中以減少内存申請時用戶态到内核态切換時鎖消耗的時間。在用python處理大對象和内存密集型任務時要格外注意python進程對系統内存的占有率。

關鍵字

上一篇: Python 第十二章 virtuale

下一篇: python 函數