答:跟内存泄漏没有直接关系
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. ICO图标在线生成转换网站

    ico是Icon file的缩写,是Windows的图标文件格式的一种,可以存储单个图案.多尺寸.多色板的图标文件. 在Windows操作系统中,单个图标的文件名后缀是.ICO.这种格式的图标可以在W ...

  2. Ansible Notes: Tower Credential的本质

    Ansible AWX/Tower credential 的本质 Ansible Tower (社区版本叫AWX)用credential这个资源来对象来存储playbook运行过程中用到的机密信息.比 ...

  3. 【Java分享客栈】我曾经的两个Java老师一个找不到工作了一个被迫转行了

    前言 写这篇文章的初衷主要是最近发生了两件事,让我感慨良多,觉得踏入这个行业的初始,有些事情就应该长远考虑,这样对职业发展才更有利,仅仅停留在技术的追求上固然能壮大自身,可逆水行舟的程序员们终究会面临 ...

  4. Vue 学习之路(一)- 创建脚手架并创建项目

    安装脚手架 命令 npm install -g @vue/cli 打开 cmd 窗口输入以上命令.当出现以下界面即表示安装完成. 查看已安装脚手架版本 命令 vue -V 在 cmd 窗口输入以上命令 ...

  5. vue-core-video-player-基于vue.js的视频播放器组件

    一 介绍 一款基于 vue.js 的轻量级的视频播放器插件插件 个性化配置 i18n 服务端渲染 画中画模式 事件订阅 易于开发 移动端适配 1.1 官方文档 https://core-player. ...

  6. 操作系统实现-loader

    博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 大家好呀,终于我们到了操作系统的loader部分了,loader也是操作系统中最重要的一个 ...

  7. 百万数据 mysql count(*)优化

    一.故事背景有一张 500w 左右的表做 select count(*) 速度特别慢. 二.原 SQL 分析Server version: 5.7.24-log MySQL Community Ser ...

  8. TinyMCE简介

    TinyMCE是一款开源.易用.UI时新的富文本编辑器. 插件丰富,自带插件基本满足要求 可扩展性强,可自定义功能 界面好看,符合现代审美 提供经典.内联.沉浸无干扰三种模式 官网:https://w ...

  9. linux篇-centos7 安装cacti

    1 cacti运行环境准备 cacti需要php+apache+mysql+snmp+RRDTool,以及cacti本身.cacti本体是用php开发的网站,通过snmp对远端设备信息进行采集.apa ...

  10. 从头创建一个新的vue项目------用npm|yarn下载vue-cli|vue-ui创建vue

    1.下载node或者是nvm node可以直接去node官网下载,http://nodejs.cn/,默认是长期维护的版本 如果想管理node的版本,可以下载nvm.这个是可选的.但是作为一个前端工程 ...