如果一个promise永不resolve,会内存泄漏吗
答:跟内存泄漏没有直接关系
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,会内存泄漏吗的更多相关文章
- 分享一下今天遇到的两个问题,一个是关于C语言内存泄漏问题,另一个是关于Linux下grep使用时的问题
C语言内存泄漏问题: 给出如下代码: #include <stdio.h> #include <stdlib.h> int main(){ int *p; p=(int*)ma ...
- GC-ALLOC 的另一个重要作用,查内存泄漏
平时我们用U3d profiler的Gc alloc 选项是为了查找一些动态的内存分配,多数是为了防止动态分配造成不定时的垃圾回收,形成CPU波峰. GC ALLOC 选项还可以用来查内存泄漏.
- 一个驱动导致的内存泄漏问题的分析过程(meminfo->pmap->slabtop->alloc_calls)
关键词:sqllite.meminfo.slabinfo.alloc_calls.nand.SUnreclaim等等. 下面记录一个由于驱动导致的内存泄漏问题分析过程. 首先介绍问题背景,在一款嵌入式 ...
- Android性能优化之利用LeakCanary检测内存泄漏及解决办法
前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...
- C++的内存泄漏检测
C++大量的手动分配.回收内存是存在风险的,也许一个函数中一小块内存泄漏被重复放大之后,最后掏空内存. 这里介绍一种在debug模式下测试内存泄漏的方法. 首先在文件的开头以确定的顺序写下这段代码: ...
- 系统剖析Android中的内存泄漏
[转发]作为Android开发人员,我们或多或少都听说过内存泄漏.那么何为内存泄漏,Android中的内存泄漏又是什么样子的呢,本文将简单概括的进行一些总结. 关于内存泄露的定义,我可以理解成这样 没 ...
- [转载]Java应用程序中的内存泄漏及内存管理
近期发现测试的项目中有JAVA内存泄露的现象.虽然JAVA有垃圾回收的机制,但是如果不及时释放引用就会发生内存泄露现象.在实际工作中我们使用Jprofiler调用java自带的 jmap来做检测还是很 ...
- android 中如何分析内存泄漏
转载:http://blog.csdn.net/fulinwsuafcie/article/details/8363218 前提条件: 1,电脑安装了java 运行环境 2,手机端开启了 USB 调试 ...
- C/C++内存泄漏及检测 转
C/C++内存泄漏及检测 2011-02-20 17:51 by 吴秦, 30189 阅读, 13 评论, 收藏, 编辑 “该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏, ...
随机推荐
- CSS简单的网页布局
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- Bugku CTF练习题---杂项---隐写3
Bugku CTF练习题---杂项---隐写3 flag:flag{He1l0_d4_ba1} 解题步骤: 1.观察题目,下载附件 2.打开图片,发现是一张大白,仔细观察一下总感觉少了点东西,这张图好 ...
- XCTF练习题---MISC---如来十三掌
XCTF练习题---MISC---如来十三掌 flag:flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab} 解题步骤: 1.观察题目,下载附件进行查看 2.打开附件,压根看 ...
- JS 中 对象 基础认识
俗话说:"万物皆对象",在 Javascript 中除了原始值几乎所有的东西都可以看做对象: 布尔是对象( new 关键词定义) 数字是对象( new 关键词定义) 字符串是对象 ...
- Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询
Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...
- 交换机POE技术知识大全
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 一个典型的以太网供电系统,在配线柜里保留以太网交换机设备,用一个带电源供电集线器(Midspan HUB)给局域网的双绞线提 ...
- pyhon对excel的xls与xlsx的读取,写入
import shutilimport osfrom openpyxl import load_workbookfrom xlutils.copy import copyimport win32com ...
- QY-16 浮标水质监测站 组成 及基础参数是什么?一文认识什么是浮标水质监测站
浮标水质监测站是设立在河流.湖泊.水库.近岸海域等流 域内的现场水质自动监测实验室,是以水质监测仪为核心,运用 传感器技术,结合浮标体.电源供电系统.数据传输设备组成的 放置于水域内的小型水质监测系统 ...
- 探索ABP的EventHub解决方案
在上一章中,我们构建了一个简单的全栈 Web 应用程序,我们已经看到了使用 ABP 框架开发应用的典型流程,在接下来,我们将使用 ABP 框架创建更高级的应用程序. 给出具有现实世界复杂性的例子并不容 ...
- Spring Cloud Alibaba入门篇
学习条件 了解web三层架构 熟练应用SSM架构 了解Maven管理工具的使用 熟练使用SpringBoot,以及了解SpringBoot基本原理. 了解部分术语:应用.工具.耦合.负载等 温馨提示: ...