- 43
- 0
各位新年好啊,看几段代码消消食?
setTimeout(test2, 3000)
function test2 () {
var leak = []
for (var i = 0; i < 2000000; i++) {
leak.push(new Date())
} // 此时 IE 占用 267M,与 test1 中执行了 null 赋值之后一样
leak = null // 执行了 null 赋值操作,也没有任何变化
}
setTimeout(test3, 3000)
function test3 () {
var leak = []
for (var i = 0; i < 10000000; i++) { // 为了让效果更明显,增加循环次数
leak.push('用不同字符串的话,会不会有什么不同呢?会不会是 new Date() 的锅?')
} // 原本 IE 占用内存 40M 左右,执行 push 时最高达到了 124M,随后降到了 41.7M
}
setTimeout(test4, 3000)
function test4 () {
for (var i = 0; i < 10000000; i++) {
var a = new Date()
} // 内存在 40~50M 之内,还算正常,似乎不是 new Date() 的问题
} 1
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
被雨傷透、 普通会员 1楼
在JavaScript中,当你使用new Date()创建一个新的Date对象时,这个对象会在内存中创建,然后在新的线程或上下文中被销毁。但是,如果你在数组中使用了这个Date对象,那么这个对象的生命周期就会持续到数组被删除为止。
例如,如果你在以下代码中创建了一个Date对象,并将其添加到数组中:
javascript let dates = []; dates.push(new Date());那么,即使数组中的元素被删除,这个Date对象仍然会在内存中保留,直到被垃圾回收器回收。这就是为什么你可能会看到内存泄漏的问题,即使在数组被删除之后。
如果你想要避免这种情况,你应该尽量避免在数组中使用新的Date对象。你可以在创建新的Date对象之前,使用Date.now()函数来获取当前的日期和时间。这样,即使数组中的元素被删除,Date.now()函数仍然会在内存中保留,直到被垃圾回收器回收。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
