我在Google上讀了很多,ruby並沒有將操作系統釋放回操作系統,我也理解這一點,因爲從操作系統中分配內存是一個代價高昂的操作。
根本不是這樣。 Ruby語言並沒有說任何關於將內存釋放回操作系統的內容。事實上,Ruby語言並沒有提及任何有關內存的問題。
Ruby有很多不同的實現,有很多不同的內存分配器和很多不同的垃圾收集器。一些內存釋放回操作系統,一些不釋放,一些在受管運行時間之上運行,甚至根本不管理內存。
例如,在J9上運行的JRuby會將內存釋放回操作系統。使用G1 GC,ParallelScavenge GC或ParallelOld GC在HotSpot上運行的JRuby會將內存釋放回操作系統。
如果開發人員希望Ruby將內存從ruby釋放回操作系統,他們如何做到這一點。
你不知道。這個實現可以將內存釋放回操作系統,在這種情況下,您不需要執行任何操作,也不會將內存釋放回操作系統,在這種情況下您無法執行任何操作。
- 我想答案是在Ruby中手動觸發GC
。
如果實現沒有將內存釋放回操作系統,則它不會將內存釋放回操作系統。期。
如果執行確實將內存釋放回操作系統,那麼無論您是否手動觸發GC,它都會執行此操作。
順便說一下:你不能在Ruby中手動觸發GC。您可以建議 a GC(使用GC::start
),但不能觸發它。
但是建議在生產應用程序上執行(運行手動GC)。
從來沒有。 GC比你知道現在或稍後運行是否合理。
注:我想我也知道GC.start(指停止整個世界紅寶石)
沒有,GC::start
只建議做一個GC。它確實而不是強制GC。此外,GC並不意味着停止世界。例如。當在J9 JVM上使用節拍器GC運行JRuby或在Azul Zing JVM上使用Pauseless GC運行JRuby時從不會停止世界。
注:紅寶石版本2.2.2
這不是有趣的一點。有趣的問題是你正在使用哪個實現,哪個垃圾收集器以及哪個操作系統。 (當然,所有這些的版本和配置設置。)的
禁用GC有時可以提高速度,在非常特殊的情況下(如要生成數百萬個對象,只有臨時對象的一個小的開銷關心期間生成過程)。 –
@NeilSlater是,_disabling_ GC可能會提高在某些情況下的速度,但我從_manually運行GC_預防。而且,在任何情況下,這樣的行動不應該對SO :) – mudasobwa