Кэш-память NodeJS с учетом нехватки памяти

Я пришел из мира Java, и существует множество реализаций (локальных) кешей в памяти. Более того, в мире Java есть SoftReference и WeakReference, и они по определению идеально подходят для реализации кэширования. ).

Я знаю, что в JavaScript нет ничего подобного, поэтому мне интересно, возможно ли иметь какие-то функции кеша, которые будут удалять/освобождать (все) кешированные объекты, если есть «низкое давление памяти». Пока что я знаю модуль lru-cache, но его реализация содержит объекты до некоторого числа/размера, что приятно. , но недостаточно хорошо, потому что, естественно, вы ожидаете, что кеш освободит объекты, если не хватит памяти.

Возможно ли вообще получить какое-то событие в NodeJS из системы, когда процессу не хватает памяти?

Или, может быть, какая-то библиотека, которая могла бы вызвать событие, например:

var cmmm = require('cool_memory_management_module');

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

На данный момент я нашел npm memwatch и модули использования npm, но все еще не в состоянии объединить все эти части вместе.


person Tomo    schedule 23.01.2014    source источник
comment
Я нашел это: nodejs.org/api/process.html#process_process_memoryusage, nodejs.org/api/os.html#os_os_freemem. У меня нет знаний о том, как связаны процессы и память, чтобы определить, нужна ли вам какая-либо из этих функций.   -  person Andreas Hultgren    schedule 23.01.2014
comment
спасибо @Andreas, я видел эти, но их недостаточно для реализации «события нехватки памяти», а os.freemem() бесполезен в процессе приложения, поскольку это не память, которую вы могли бы использовать, а только информация о вашем окружающая обстановка...   -  person Tomo    schedule 23.01.2014


Ответы (1)


В JS пока нет WeakReference или подобных, но они появятся в ES6 (список версий).

Пока что теперь вы можете создать что-то, что просто проверяет каждые несколько секунд, не заканчивается ли память, и очищает вашу карту.

setInterval(function() {
    /* check if memory low and do something */
}, 2000).unref();
person CFrei    schedule 23.01.2014
comment
Хорошо, но эта часть проверка нехватки памяти интересна. как узнать, что памяти мало? process.memoryUsage() на самом деле ничего не говорит о том, что у вас мало памяти. только текущий heapTotal и использование кучи, но в следующий момент V8 может выделить больше памяти, поэтому heapTotal изменится. - person Tomo; 24.01.2014
comment
Джеп. Если вы действительно хотите сделать это за один раз, нажмите на себя в process.nextTick(). - person CFrei; 24.01.2014