我有关于内存管理的问题。 我最简单的代码在这里:
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。但它不会清理内存。什么增加内存以及如何在不重新加载页面的情况下清理它
答案 0 :(得分:2)
使用浏览器的分析工具确定累积内存的位置。在Chrome中,这些分析工具位于Chrome开发者工具 F12 的效果标签下。
在所有其他性能图表中,您应该看到一个内存使用情况,看起来像这样。
您可以使用它来查看浏览器是否以及何时在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) 它使您的对象可以从控制台访问。仅当无法再访问该对象时,垃圾收集才会释放内存。