有谁知道javascript的内存释放是怎么操作的嘛?
一般网上都是说将对象或者某个值赋值null
然后调用CollectGarbage()函数,
可是又有认说CollectGarbage()函数是不安全的,而且也不能起到真正释放的目的,
有哪位高手知道呢?

解决方案 »

  1.   

    期待中。我也一直困惑这个问题,尤其页面是纯js完成的,比如:Ext完成的大页面,我就想回收资源。可不知道该如何做。js是C写的,但是有很好的垃圾回收机制么?java也是C写的,但是它做到了。
      

  2.   

    自动会回收
    也可用赋值为null
      

  3.   

    这个我知道,,,,但是其不能起到根本作用,赋值了null之后内存还是会网上涨,当然这是因为你
    赋值了null之后内存其实并没有释放,只是将这个内存位置空着,还是占着,当有相同名的变量定义的时候
    就会将这个空间分配给他。如果没有用null的话那么内存会分配另外的空间
    总的来说内存使用确实小了
    但是没有起到回收的功能
    我想了解的是js是怎么释放内存
    (或许js没有这种机制,除了关闭浏览器或者最小化浏览器的时候)
      

  4.   

    lz也许可以看下这个:http://topic.csdn.net/u/20090609/08/a8ca66f2-416a-4d97-81be-9e1e872e463e.html
      

  5.   

    一般来讲,浏览器最小化的时候就会重新整理内存,只要不造成内存泄漏,都不会有什么问题,关于防止内存泄漏,可以参考一下:如何避免Javascript事件绑定出现内存泄漏
      

  6.   

    其实类似java的GC机制回收主要有下面几个情况:
    1.手动设置为null,当把一个变量手动设置为null的时候,系统会回收2.无关联引用的变量,系统检查到自动回收,比如var a=new Object()  如果无任何变量声名是指向他的话,在无用的时候就自动回收.但是如果var b=a; b在做操作,由于b对a有引用,所以a无法回收,要等b回收以后a方可回收3.生命周期结束,既退出栈的时候,回收.一般就是我们说的局部变量
      

  7.   

    这确实是不错的方法。。
    可是我在开发种遇到的不是这种问题,而是要重复的调用js的函数,每次都有很多对象生成,
    在与服务器交互的时候使用的ajax,数据传输会比较大,服务器发往客户端的是xml文档对象,当然使用之后也要对这个对象进行销毁,否则会很占内存,可是不知道怎么去释放。直接赋值null没说明效果
      

  8.   

    这个方法是将声明的对象引用去除,但是能保证这个对象本来指向的那个地址已经被释放了吗?
    还是再调用CollectGarbage()函数进行来回收?
    还是系统自动回收?
      

  9.   

    这只是一个简单的垃圾回收问题,如果做过编译器和bit解释器的人应该很熟悉这个原理,原理比较复杂,不过有一点是一定的javascript不会主动释放内存!这个主要同性能要求有关,其实javascript是可以做到自动释放内存的。但是现在的解释核心都没有这样去做,jscript的内存释放机制还是可以的,但是仍然不会主动释放所有内存(可能会释放部分内存)