2016-06-15 52 views
2

如何使程序使用虛擬內存Windows如何讓程序使用虛擬內存?

我有一個很長的perl腳本,這是使用6GB +的記憶和增加。我的機器只有8GB或RAM。這可能是由模塊中的內存泄漏引起的,但現在我無能爲力。

是否有可能使其使用虛擬內存,或者這是否僅由Windows控制?

+0

請記住,32位程序僅限於使用2或3 GB,無論您擁有多少內存。您可能需要64位版本的Perl('perl -V:archname'輸出中的'x64')才能使用虛擬內存。它會隨着內存的需要而自動發生。 – ikegami

+0

@ikegami這絕對是64位'perl'。它目前坐在* 7.17GB *的* 8GB *內使用RAM。我會認爲它應該在此之前交換到虛擬內存。 – CJ7

+2

顯然,物理內存比虛擬內存更適合一切。不會減慢磁盤IO或使用它的進程;這是雙贏的。爲什麼操作系統可以使用虛擬內存,並且可以根據需要移動虛擬內存? – oldtechaa

回答

6

如果需要並且配置爲具有交換空間,操作系統將自動提供虛擬內存。你無法從Perl程序中控制它。

如果您的Perl程序最終有內存泄漏,它將開始交換到頁面文件。當其內存消耗導致總內存超過物理內存和頁面文件的總和時,事情會慢慢爬行,進程可能無法響應和/或崩潰。

無論如何,頁面文件的大小不能動態改變,需要重啓。唯一的長期解決方法是找到並修復泄漏。

+0

我已經讓程序運行,它非常接近我機器的物理內存限制。我希望它能夠更早地交換到頁面文件,這樣不會中斷系統其餘部分的性能。順便說一下,內存泄漏很可能在導入的模塊中。我需要很長時間才能找到它。 – CJ7

+0

Windows將在需要時進行交換。只要總承諾內存大於物理內存,性能就會下降,特別是如果其他進程中發生了很多事情。這是不可避免的。 –

+0

@ CJ7,它不會放慢速度,只是接近RAM的極限。如果需要更多,那麼它會將未使用的Perl內存塊放入虛擬機中,並且由於泄漏的塊未被使用,您應該看到緩慢下降。 – oldtechaa