答:跟内存泄漏没有直接关系
gc的策略不会改变,如果该promise没有被人引用,就会被gc掉。如果仍被引用,就不会被gc掉。
即使一个promise,resolve或者reject了,但是它还被人引用,仍然占用内存。

李政 2015/11/19 16:28:39
嗯差不多,可以认为promise就是一个普通的对象,不过在vm底层会由host提供一些机制来托管promise。比如chrome的调试器里可以看到所有的promise
李政 2015/11/19 16:28:56
比如node里面通过nextTick实现new Promise的回调函数调用

梁志 2015/11/19 16:29:59
new Promise的回调函数调用,是指promise的执行体吗

梁志 2015/11/19 16:30:11
我一直认为执行体是个同步过程
16:30:46
梁志 2015/11/19 16:30:46
我之前写过很多测试,并发,没有找到异步的证据
李政 2015/11/19 16:31:36
node是异步的,chrome浏览器是同步的

梁志 2015/11/19 16:32:08
怎么知道呢
16:33:03
李政 2015/11/19 16:33:03
哦不对,的确是同步的,then是异步的
16:35:09
李政 2015/11/19 16:35:09
then的异步调用需要host机制支持
16:40:25
野人王 2015/11/19 16:40:25
按照李政的说法做了个实验,发现node里原生Promise和then是同步的,bluebird的then是异步的
李政 2015/11/19 16:40:46
then是异步的呀
李政 2015/11/19 16:41:03
你试试这个:
var a = 0; Promise.resolve(0).then(function(){console.log(a)}); a = 1;
16:42:26
梁志 2015/11/19 16:42:26
node原生Promise其实是V8的promise实现吧
野人王 2015/11/19 16:44:04
new Promise(function(resolve, reject){
console.log(1);
for(var i=0; i<999999999; i++){}
resolve();
}).then(function(){
console.log(2)
})

setInterval(function(){
console.log('n')
})
16:44:53
李政 2015/11/19 16:44:53
then用nextTick实现,比setInterval快
野人王 2015/11/19 16:46:50
果然!
16:46:57
野人王 2015/11/19 16:46:57
确实是异步的
徐子龙 2015/11/19 16:47:43

徐子龙 2015/11/19 16:47:49
这个7是怎么解释的。。
野人王 2015/11/19 16:48:45
啥东西的返回值吗
李政 2015/11/19 16:48:47
setInterval的返回值
16:49:05
野人王 2015/11/19 16:49:05
不过你那段代码不能证明他是异步的,then执行时就是放进callback队列

梁志 2015/11/19 16:49:34
new Promise(function(resolve, reject){
console.log(1);
for(var i=0; i<999999999; i++){}
resolve();
}).then(function(){
console.log(2)
});

process.nextTick(function() {
console.log('n')
});
徐子龙 2015/11/19 16:49:37
o对
野人王 2015/11/19 16:49:45
调用callback是异步的

梁志 2015/11/19 16:49:53
可是浏览器有nextTick吗
李政 2015/11/19 16:50:28
虽然print出来的7在2后面

梁志 2015/11/19 16:50:36

李政 2015/11/19 16:50:46

那就改改
徐子龙 2015/11/19 16:56:12
找个数组
徐子龙 2015/11/19 16:56:16
往里面push

梁志 2015/11/19 16:56:18
一直以为是等价的
徐子龙 2015/11/19 16:56:32
去掉console的影响
居玉皓 Roscoe 2015/11/19 16:57:41
貌似setTimeout用的红黑树,nextTick用的链表
16:58:18
野人王 2015/11/19 16:58:18
不是吧。。。nextTick是eventLoop中加的,setInterval是Timer
李政 2015/11/19 16:58:43
setTimeout用的timer机制,和其它事件源一起竞争的,nextTick就是作弊直接插队

梁志 2015/11/19 16:59:09
timer有自己的队列,这个nextTick看来有自己的队列
野人王 2015/11/19 16:59:43
李政,你说的host机制,有啥科普资料吗。。
17:06:23
梁志 2015/11/19 17:06:23
我想起来了。其实promise的then是异步的原因是,害怕then.then.then太长,导致阻塞进程,违背了js的事件机制的特征。可是这样就给有竞争条件的代码带来新的问题。

梁志 2015/11/19 17:07:06
并不是非要这么实现,只是一种更高层面的考虑,跟底层技术可能无关

http://v8.paulfryzel.com/docs/master/classv8_1_1_isolate.html#ac3cbe2a1632eb863912640dcfc98b6c8

如果一个promise永不resolve,会内存泄漏吗的更多相关文章

  1. 分享一下今天遇到的两个问题,一个是关于C语言内存泄漏问题,另一个是关于Linux下grep使用时的问题

    C语言内存泄漏问题: 给出如下代码: #include <stdio.h> #include <stdlib.h> int main(){ int *p; p=(int*)ma ...

  2. GC-ALLOC 的另一个重要作用,查内存泄漏

    平时我们用U3d profiler的Gc alloc 选项是为了查找一些动态的内存分配,多数是为了防止动态分配造成不定时的垃圾回收,形成CPU波峰. GC ALLOC 选项还可以用来查内存泄漏.

  3. 一个驱动导致的内存泄漏问题的分析过程(meminfo->pmap->slabtop->alloc_calls)

    关键词:sqllite.meminfo.slabinfo.alloc_calls.nand.SUnreclaim等等. 下面记录一个由于驱动导致的内存泄漏问题分析过程. 首先介绍问题背景,在一款嵌入式 ...

  4. Android性能优化之利用LeakCanary检测内存泄漏及解决办法

    前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...

  5. C++的内存泄漏检测

    C++大量的手动分配.回收内存是存在风险的,也许一个函数中一小块内存泄漏被重复放大之后,最后掏空内存. 这里介绍一种在debug模式下测试内存泄漏的方法. 首先在文件的开头以确定的顺序写下这段代码: ...

  6. 系统剖析Android中的内存泄漏

    [转发]作为Android开发人员,我们或多或少都听说过内存泄漏.那么何为内存泄漏,Android中的内存泄漏又是什么样子的呢,本文将简单概括的进行一些总结. 关于内存泄露的定义,我可以理解成这样 没 ...

  7. [转载]Java应用程序中的内存泄漏及内存管理

    近期发现测试的项目中有JAVA内存泄露的现象.虽然JAVA有垃圾回收的机制,但是如果不及时释放引用就会发生内存泄露现象.在实际工作中我们使用Jprofiler调用java自带的 jmap来做检测还是很 ...

  8. android 中如何分析内存泄漏

    转载:http://blog.csdn.net/fulinwsuafcie/article/details/8363218 前提条件: 1,电脑安装了java 运行环境 2,手机端开启了 USB 调试 ...

  9. C/C++内存泄漏及检测 转

    C/C++内存泄漏及检测 2011-02-20 17:51 by 吴秦, 30189 阅读, 13 评论, 收藏, 编辑 “该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏, ...

随机推荐

  1. C#二次开发BIMFACE系列60 File Management文件管理服务及应用场景

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<C#二次开发BIMFACE系列>教程中详细介绍了如何注册BIMFACE.测试.封装服务器端接口并提供了丰富的Demo.视 ...

  2. JS基础代码

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  3. 《图解UE4渲染体系》Part 0 引擎基础

    在介绍UE4渲染体系前,我们有必要来先看一下UE4是用什么样的方式来构建游戏场景数据的. 1 Object 在UE4中当我们说Object,通常是指代引擎代码中的UObject类,它是引擎里管理绝大部 ...

  4. 修复Arch Linux和Manjaro Linux无法显示emoji的问题

    安装好Arch Linux或Manjaro Linux系统后默认没办法正常显示emoji,通常会变成方框或者带有unicode码的方块: 这是因为缺失字体以及相关的字体配置导致的. 当然也有一小部分应 ...

  5. grafana v8.0+ 隐藏表格字段

    Select panel title → Inspect → Panel JSON Set "type" to "table-old" Apply The vi ...

  6. 手脱UPX(3.91)

    1.使用Detect It Easy进行查壳: 2.使用x32dbg打开该带壳程序,在选项->选项->异常中添加区间设置0~FFFFFFFF全忽略: 3.我们F9运行到程序入口处,看到了p ...

  7. SecureCRT使用SSH链接出现Password Authentication Failed,Please verify that the username and password are correct的解决办法(亲测有效)

  8. Git 后续——分支与协作

    Git 后续--分支与协作 本文写于 2020 年 9 月 1 日 之前一篇文章写了 Git 的基础用法,但那其实只是「单机模式」,Git 之所以在今天被如此广泛的运用,是脱不开分支系统这一概念的. ...

  9. WSL2+Docker+IDEA一站式开发调试

    WSL2+Docker+IDEA一站式开发调试 前言 ​ 我们知道,Docker是一个容器引擎:对于开发者来说,使用Dokcer容器部署各种开发需要的中间件(比如myql.redis)会非常简单方便: ...

  10. 好客租房28-state和this.setState(this.setState修改状态)

    状态是改变的 语法:this.setstate 千万不要直接改变this.setState setState 修改state 更新ui 数据驱动视图 //导入react     import Reac ...