2014-01-23 63 views
8

我來自Java世界,並且有很多(本地)內存中緩存的實現。而且在Java世界中有SoftReferenceWeakReference,根據定義,它們是緩存實現的理想選擇。NodeJS具有內存壓力感知的內存緩存

我知道JavaScript沒有類似的東西,所以我想知道是否有可能具有某種緩存功能,如果存在「低內存壓力」,它將刪除/釋放(所有)緩存對象。到目前爲止,我知道lru-cache模塊,但是它的實現保存了一些數目/大小的對象,這很好,但還不夠好,因爲如果沒有足夠的內存,自然而然地,您會希望緩存釋放對象。

當進程內存不足時,甚至可以從系統中獲取NodeJS中的某個事件嗎?

或者一些庫,可能引發事件,像:

var cmmm = require('cool_memory_management_module'); 

cmmm.on('low_memory', function(){ 
    //signaling to clear cache entries 
}); 

到目前爲止,我發現npm memwatch,並且npm usage模塊,但仍無法將所有這些片段組合在一起。

+0

,我發現這些:http://nodejs.org/api/process.html#process_process_memoryusage,http://nodejs.org/api/os.html#os_os_freemem。我不知道流程和內存如何關聯以便能夠判斷這些功能是否是您需要的功能。 –

+1

thx @Andreas,我見過這些,但是它們還不足以滿足'低內存事件'的實現,並且os.freemem()在應用程序過程中沒有用處,因爲這不是你可以使用的內存,你的環境...... – Tomo

回答

4

JS中沒有WeakReference或類似的,但應該在JS6 (Version List)

到目前爲止,現在你可以構建一些東西,如果內存不足並清理你的地圖,每隔幾秒鐘就會檢查一次。

setInterval(function() { /* check if memory low and do something */ }, 2000).unref();

+1

好的,但那部分*檢查內存低*是否有趣。你怎麼知道內存是否低? process.memoryUsage()實際上不會說「你內存不足」。只有當前heapTotal和堆的使用情況,但在下一刻,V8可以「malloc」更多的內存,所以heapTotal會改變.. – Tomo

+1

Jep。如果你真的想在單次往返中完成它,請點擊'process.nextTick()'。 – CFrei