Articles of 垃圾收集

这个对象垃圾收集?

我有2个模块: //a.js var obj = {}; require ("./b")(obj); obj = null; //POINT P //b.js module.exports = function (obj){ obj = null }; 在P点,obj会被垃圾收集吗? 编辑:好吧,似乎Node.js只是caching模块“元数据”(searchfunction NativeModule 在这里 ),所以是的,obj将被垃圾收集。

Node.js似乎正在收集私有variables,即使他们需要

我有几个模块从数据库中提取数据并将其存储在本地内存中。 然后我有function,从不同的网页需要他们的对象的数据。 它的工作原理很好,除了在暂存服务器上一天一次或两次的对象都是空的,我必须重新启动服务器来重新填充数据。 我已经删除了这里的一些复杂性,但是这是这个想法,几个小时后,道路是空的,getRoad总是返回null; var db = require('./db.js'); var roads = []; db.query('select * from road', function(err, rows) { if (err) { console.log(err); } roads = rows; }); module.exports.getRoad = function(id) { if (roads[id]) { return roads[id]; } return null; }; 更新: 我添加db.js,以便您可以看到里面有什么。 我还在每一个日志中都join了大量日志logging,所以下一次失败的时候我会有更多的细节。 var Pool = require('mysql-simple-pool'); var mysql_pool = new Pool(50, { host: […]

setTimeout会不会被垃圾收集?

假设我有以下myFunction & setTimeout二重奏 function myFunction(){ var am_i_eaten = 'ffdfjdhsfhs'; setTimeout(function(){ console.log(am_i_eaten); },3000); } myFunction(); setTimeout保持myFunction的作用域(因为它仍然可以打印am_i_eaten而没有问题),并防止它在我的Node.JS环境中被垃圾收集? 我相信这个行为与浏览器中的行为有些不同。 谢谢!

节点在简单循环中耗尽内存

试图做一些地理空间性能压力testing。 我有以下代码(我不能–expose-gc grunt 问题,所以我不能调用global.gc())。 var getRandomRange = function(start, end){ return parseFloat((Math.random() * (start – end) + end).toFixed(4)); } /* Max and min long and lat. Latitude : max/min +90 to -90 Longitude : max/min +180 to -180 */ var createRandomSeeds = function(index) { var createSeedsTestPropertyData = []; for(var i = 0; i < 1000; i++) […]

垃圾收集在Node.JS中的套接字

我正在处理一个Node库,它在完成之后没有明确closures套接字。 相反,它试图通过删除对套接字的引用来清理,并让它们被垃圾收集。 谷歌search失败了我:我不认为这是可能的气相色谱来清理未closures的sockets。 也就是说,我认为从操作系统的angular度来看,任何套接字描述符都会被使用。 此外,假设我作为库消费者可以访问套接字对象,那么closures它们的最佳方式是什么? 我用end() , close()和destroy()成功地玩过了。 有时他们似乎阻止永久(结束/摧毁),而其他时候似乎callback从来没有(closures)。

垃圾收集器是否会从NodeJS的内存中摧毁所需的模块?

我正在阅读堆栈溢出中有关NodeJS中模块的延迟加载和手动卸载的一些解答,引用的答案之一 节点是单线程的,因此加载模块的内存占用不是每个连接,而是每个进程。 加载一个模块是一次性的把它存入内存。 这是一个足够公平的解释,但是有一个问题,是否有一段时间,旧的未使用的模块(以前需要的,不再用于执行)从caching清除? 垃圾收集器在这种情况下如何工作? 更新 : 此答案显示了如何从caching中手动删除模块,这也表明模块caching可能不同于常规的内存中对象 var name = require.resolve('moduleName'); delete require.cache[name];

–expose-gc停止垃圾收集器被自动执行?

我想能够手动执行垃圾回收,但我不想停止nodejs自动执行gc,当它认为是相关的。 –expose-gc停止自动gc执行? 如果我想停止自动gc执行什么参数我需要添加?

这个Object.keys(o).forEach(…)是否在node.js GC密钥迭代完成后执行?

基于这个答案 ,这将“ 加载所有的钥匙到内存 ”: Object.keys(o).forEach(function(key) { var val = o[key]; logic(); }); 记忆被“释放”了吗? 还是有什么东西需要“ 零 ”呢?

在Node.js中禁用GC

有没有办法完全禁用GC(或)清道夫,至less? 在这里find讨论 – https://github.com/nodejs/help/issues/462在这里 – https://twitter.com/dolftax/status/825742173698142209 我试过node –nouse_idle_notification –trace_gc –max-old-space-size=1000 –max-semi-space-size=64 –noconcurrent_sweeping example.js Scavenge和Mark-Sweep都不停止。 请参阅Github问题了解更多信息。 我的问题是,我错过了什么? 还有什么我可以做,让GC不能运行。 仅供参考,这是为了实验目的,不希望不停止GC的替代解决scheme。 节点v7.9.0 V8 5.4.500.45

如何更改node.js内存设置,以允许非常大(> 100GB)的内存

我有一个相当大的json文件包含几百万geojson点。 我可以在没有问题的情况下使用JSONParser读取它。 然后我试图用geojson-vt处理文件。 对于我使用的是700mb的testing文件集,当我将–max_old_space_size v8参数设置为8GB左右时,这个工作正常。 现在我正在尝试使用一个3GB的完整文件来处理单个状态并遇到问题。 看起来无论设置max_old_space_size参数有多高,在分配失败之前,垃圾收集器都会使用大约34GB,尽pipe我将max_old_space_size设置为50GB。 我读过一些其他可能被使用的v8参数。 这是我试图运行的最后一个命令: node –max_executable_size=5000 –max_old_space_size=54000 –max-semi-space-size=5000 -nouse-idle-notification –noconcurrent_sweeping app.js 这个命令失败了。 <— Last few GCs —> [27445:0x2e900d0] 587348 ms: Scavenge 29492.1 (31038.4) -> 29422.8 (31521.9) MB, 2092.6 / 0.0 ms allocation failure [27445:0x2e900d0] 591039 ms: Scavenge 30244.6 (31803.4) -> 30175.9 (32273.4) MB, 2070.4 / 0.0 ms allocation failure [27445:0x2e900d0] […]