欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

问一个入门级有关问题:“new”用关闭吗

更新时间: 2014-01-05 01:52:03 责任编辑: Author_N1

 

问一个入门级问题:“new”用关闭吗?
比如:var image=new Image();
不关闭new会不会造成内存泄露?关闭语句是什么?
--参考方法--
image = null;


--参考方法--
new 是实例化一个变量,不用关闭,也没有关闭的方法。
--参考方法--
楼上说的都对~~
补充一下:js里的内存泄露不是new造成的,而是由循环引用,闭包等造成的。
1楼的方法是一种避免内存泄露的方法。
http://developer.51cto.com/art/201007/212040_all.htm
--参考方法--
这得看构造函数里面使用的资源及使用方式,比如dom操作,flash使用,图形渲染都是可能有内存泄露的,如果其中有造成泄露的部分,你可以给类写一个显示释放资源的方法

js给予了最大的灵活性,同时意味着很多东西都是需要自己实现的,比如继承,也如这儿的类资源释放方法
--参考方法--
引用:
我是楼主,谢谢各位!
我的语句到底有没有泄露呢?“new Image()”是不是也像C++一样,在堆区开辟了一块内存?
进一步说,关闭页面后,我这种语句(包括上面说的循环引用、闭包等)占用的内存会自动全部释放吗?

是否能自动释放要看使用方式,循环引用,不恰当使用闭包会造成变量无法释放
没代码你这样问谁知道会不会泄露?
如果是关闭页面的话,页面所有资源都会被释放
--参考方法--
引用:
Quote: 引用:

Quote: 引用:

我是楼主,谢谢各位!
我的语句到底有没有泄露呢?“new Image()”是不是也像C++一样,在堆区开辟了一块内存?
进一步说,关闭页面后,我这种语句(包括上面说的循环引用、闭包等)占用的内存会自动全部释放吗?

是否能自动释放要看使用方式,循环引用,不恰当使用闭包会造成变量无法释放
没代码你这样问谁知道会不会泄露?
如果是关闭页面的话,页面所有资源都会被释放
“new Image()”是不是也像C++一样,在堆区开辟了一块内存?

不知道,这是浏览器的对js及dom的支持实现了,和js语言自身没关系了
--参考方法--
引用:
我是楼主,谢谢各位!
我的语句到底有没有泄露呢?“new Image()”是不是也像C++一样,在堆区开辟了一块内存?
进一步说,关闭页面后,我这种语句(包括上面说的循环引用、闭包等)占用的内存会自动全部释放吗?


开辟了啊,这个是必然的。

C++需要程序员手动管理内存,new了东西就要记得自己delete,有构造器,还有对应的析构器。

就像java一样,js有自动垃圾回收机制,浏览器或者说js解析引擎会使用算法来判断对象是否符合回收条件,从而帮助程序员自动管理对象。最直接的方法是判断对象的引用个数,当然实际肯定没这么简单。

JS没有析构函数,也不存在把某个对象手动析构的说法,img=null是将该对象的引用置空,让这块内存无引用指向,等待自动GC。某些场合可能会造成对象无法被GC,就是js中所谓的内存泄露,良好的代码应该尽量避免这些问题。
--参考方法--
不是避免极端情况,是我可以确定img再以后的代码中用不着了。

--参考方法--
引用:
还有,img=null是将该对象的引用置空?那可以用free或delete释放吗?
到底该怎样做呢?

现在虚拟机都是  gc机制 一个对象没有被引用(引用链也没有被引用) 则会被释放
从某种意义上说

function k(){
    var a = new ...;
}

k函数执行完 普通情况下 a指向的对象的引用就为0了 因为 变量a 已经出栈被释放了
这个时候 你不需要 手动设置 null

所以说 基本你不需要考虑 释放这个情况

理论上 一个全局变量你不需要使用了 那么就 设置null吧
一个局部变量 不需要设置null  因为出了局部就不存在了
如果一个对象存在  那么肯定有一个 全局存在的变量(对象) 或者当前运行中的代码 可以追踪到这个对象

类似这样的语言 在内存管理上 没我们程序员什么事 如果没释放 那是运行环境的问题

总之目前这种自动清引用管理内存的语言 要写出 没被释放的对象的代码 还是有难度的(理论上)


上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 01:52:03
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/2246/
本文WWW.DOC100.NET DOC100.NET版权所有。