JavaScript清理内存

时间:2017-09-11 03:58:08

标签: javascript jquery memory-management

我有关于内存管理的问题。 我最简单的代码在这里:

var url="/abrapo.php";
var ob={start_:100, token:null}

function post_token(){
  $.post(url,{access:ob.token})
   .done(function(data){
      console.log(data);
      ob=data;
    });
}

我每秒都调用函数post_token。所以2000年之后用户有内存问题,ram上升到2GB。我不需要保存任何只想在发布和清除内存后记录数据的东西。我已经谷歌搜索并找到删除ob。但它不会清理内存。什么增加内存以及如何在不重新加载页面的情况下清理它

3 个答案:

答案 0 :(得分:2)

使用浏览器的分析工具确定累积内存的位置。在Chrome中,这些分析工具位于Chrome开发者工具 F12 效果标签下。

  • 点击顶部附近的内存复选框以启用内存分析
  • 点击开始分析和重新加载页面 Ctrl + Shift + E
  • 让分析运行一段时间,大多数页面在2-3秒内加载,但听起来您的页面需要运行的时间超过
  • 点击停止按钮停止分析

在所有其他性能图表中,您应该看到一个内存使用情况,看起来像这样。

enter image description here

您可以使用它来查看浏览器是否以及何时在Javascript堆上执行垃圾收集。您可能需要通过将某些对象设置为null来手动清除它们。此外,尽量避免使用周期性引用和其他复杂的引用模式,这些引用模式可能会导致javascript引擎更长时间地保留对象。

Click here,有关浏览器中内存管理和垃圾收集的更多信息。

答案 1 :(得分:0)

我在为数据采集设备编写UI时遇到了类似的问题,并设法通过将每个包含大数据数组的变量设置为null来使其飞行。

您的用例不容易仅使用您的代码进行复制,但我建议您尝试设置

data = null;

ob = null;

每当不使用时。

您可能需要稍微调整一下建议,比如只分配令牌:

ob.token = data.token;

在这种情况下,只有令牌必须设置为null

ob.token = null;

这实际上实现了它为垃圾收集器提供了清除未使用对象的机会,因为使用它们的变量显然设置为null。哦,是的,内存分析是你的朋友,找出你应该归零的原因

答案 2 :(得分:0)

根据您的代码示例,问题出在console.log(data) 它使您的对象可以从控制台访问。仅当无法再访问该对象时,垃圾收集才会释放内存。