我寫了一個擴展素數的數據庫的程序。這個程序是用python編寫的,並且運行在Windows 8(x64)和8GB RAM上。使用比可用內存更多的內存
該程序將存儲的所有素數存儲在list
的integers
中作進一步計算,並在運行時使用RAM的大約6-7GB
。然而,在一些運行中,這個數字降到了100MB
以下。內存使用率在運行期間保持低電平,儘管隨着更多數字添加到主陣列中而增加。請注意,並非所有運行都會導致內存丟失。
的內存使用任務管理器測量
這些,看似隨意,滴,導致我下面的說法:
- 有一個在我的代碼中的錯誤,使其跌落關鍵的數據和搞亂結果(最有可能但不被結果支持)
- Python恰好在一段時間後極好地優化了我的代碼。
- Python或Windows正在通過清理我的素數數組中未使用過多的部分來補償RAM的過度使用。 (最終導致計算錯誤)
- Python或Windows正在通過分配磁盤空間而不是RAM來補償RAM過度使用。
問題
- 可能是什麼這個內存的原因(S)下降?
- python如何處理使用超過可用RAM的程序?
- Windows如何處理使用多於可用RAM的程序?
我是否正確地假設RAM中剩下的是最常用的數據(意味着列表的第一部分,幾乎總是被迭代)以及最新添加的數據(最後一部分列表)?而最沒有用的數據(中間)被髮送到交換空間? –
@FelixZY:也許吧。 Windows(管理虛擬內存)不知道列表的哪一部分是哪一部分。這只是記憶的一頁,其中一些似乎比其他的更頻繁地使用。操作系統將那些看起來並沒有太多用處的東西換掉,作爲一名應用程序編寫者,您對哪一部分沒有太多的控制或知識。 –