小编How*_*erg的帖子

Arrays.asList()vs Collections.singletonList()

在Collections.singletonList(something)上使用Arrays.asList(something)制作包含一个项目的列表是否有优势(或许多不同之处)?后者使得返回的列表也是不可变的.

java collections

121
推荐指数
3
解决办法
6万
查看次数

NodeJS内存使用VM执行不受信任的代码时泄漏

我正在使用NodeJS VM模块安全地运行不受信任的代码.我注意到一个巨大的内存泄漏,每次执行需要大约10M的内存,并且不会释放它.最终,我的节点进程最终使用500M +内存.经过一番挖掘,我将问题追溯到不断创建虚拟机.为了测试我的理论,我评论了创建VM的代码.果然,内存使用率急剧下降.然后我再次取消注释代码,并在问题区域周围策略性地放置了global.gc()调用,并使用 - expose-gc标志运行节点.这大大减少了我的内存使用量并保留了功能.

使用完之后有没有更好的方法来清理VM?

我的下一个方法是缓存包含给定的不安全代码的vm并重新使用它,如果它再次看到不安全的代码(背景:我让用户为文本块编写自己的解析函数,因此,不安全的代码经常执行或执行一次,再也没见过.

一些参考代码.

  async.each(items,function(i,cb){
            // Initialize context...
            var context = vm.createContext(init);

            // Execute untrusted code
            var captured = vm.runInContext(parse, context);

            // This dramatically improves the usage, but isn't 
            //   part of the standard API
            // global.gc();

            // Return Result via a callback
            cb(null,captured);
     });
Run Code Online (Sandbox Code Playgroud)

garbage-collection memory-leaks virtual-machine node.js

7
推荐指数
1
解决办法
682
查看次数