答:跟内存泄漏没有直接关系
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. SpringCloudAlibaba微服务docker容器打包和部署示例实战

    概述 我们使用前面<SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码分析(中)>的两个微服务示例,分别是库存微服务和订单微服务,基于Nacos注册中心和配置 ...

  2. IOC简介 -Bean的作用域 创建对象

    创建对象 创建对象时默认使用无参构造器,无论对象在容器中后续是否被使用, 都会先实例化对象 . (婚介网站,里面人都是先存在的,到时直接牵手就行) 也可以使用以下方法,使用有参构造器来创建对象 根据参 ...

  3. [AcWing 770] 单词替换

    点击查看代码 #include<iostream> #include<sstream> using namespace std; string s, a ,b; int mai ...

  4. AsyncLocal<T>在链路追踪中的应用

    前言 在项目生产中日志的记录是必不可少的,在.net项目中,要说日志组件,log4net绝对可有一席之地,随着公司业务的发展,微服务则必定无可避免.在跨服务中通过日志进行分析性能或者排查故障点,如何快 ...

  5. STM8S103F3P6 开发环境笔记

    STM8S103F3 产品手册 https://www.st.com/resource/en/datasheet/stm8s103f2.pdf 内核 16 MHz advanced STM8 core ...

  6. Android 图像显示系统 - 导出图层数据的方法介绍(dump GraphicBuffer raw data)

    一.前言 在项目的开发中,为了定位Android显示异常的原因:GPU渲染 or GPU合成 or HWC合成送显异常的问题.我们通常会把图层的原始数据写到文件,然后通过RGB或YUV的软件工具来查看 ...

  7. 批量上传文件或者上传大文件时 gateWay报错DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144

    一.描述 最近在批量上传文件时网关出现了异常,后面发现上传大文件也会出现文件超过256发生异常,异常信息如下: org.springframework.core.io.buffer.DataBuffe ...

  8. GB/T 25000.51-2016 系统与软件工程、系统与软件质量要求和评价 第51部分

    中科软测认证中心(软件测评) 1.支持GB/T 25000.51的质量特性 (1)产品质量模型及特性 功能性 功能完备性 功能正确性 功能适合性 功能性的依从性 性能效率 时间特性 资源利用率 容量 ...

  9. 组织:ITU

    国际电信联盟(International Telecommunication Union -- ITU)是联合国专门机构之一,主管信息通信技术事务,由无线电通信.标准化和发展三大核心部门组成,其成员包 ...

  10. elasticsearch-spark的用法

    Hadoop允许Elasticsearch在Spark中以两种方式使用:通过自2.1以来的原生RDD支持,或者通过自2.0以来的Map/Reduce桥接器.从5.0版本开始,elasticsearch ...