java new出的对象在不用的时候 jvm回收机制会自动销毁该对象 释放资源
php有差不多的垃圾回收机制吗?  还是都需要手工销毁?谢谢各位大牛帮忙解答了

解决方案 »

  1.   

    吹牛逼的吧 为何还要mysql_close()  还要unset  如果真如你所说 这些工作我们都不做了 系统帮我们搞定了  我还没见到php的自动销毁例子呢 大哥 如果你真的懂 麻烦给个测试例子 让我真的相信 thanks for your reply
      

  2.   

    如果代码执行时间过长还是用unset  比较好点 因为他会在页面执行完成 后才释放 自动的总是没手动的好一些 我感觉
      

  3.   

    这个不能靠感觉 得有例子 靠感觉会吃亏的 小兄弟 but i'm still say thanks for your suggestion
      

  4.   

    是的,吹牛逼的,我也不懂,所以你记得每次用完都要unset 和 mysql_close(); 记得最好是顺带把apache mysql 啥的都重启一次,要不行记得把系统也给重启一次,这样应该就真的unset了.我还没见到php的自动销毁例子呢 做为一个开源了这么多年的东西,网上有各式各样开源代码的玩意,你居然没有见到过,那么你是不是应该做两个判断1.不具备这样的例子
    2.不需要这样的例子
    在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP的GC垃圾处理机制,防止内存溢出。当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件.Don`t thank me.I don`t like this discussion.
      

  5.   

    5楼说得在理。给个例子说明一下。类中的析构函数就是在垃圾回收时执行的,那么就可以利用这一点。class Test
    {
    function __construct()
    {
    echo __CLASS__ . ' Constructor is called.' . '<br />';
    }

    function __destruct()
    {
    echo __CLASS__ . ' Destructor is called.' . '<br />';
    }
    }$testObj = new Test();for($i = 0; $i < 10; $i++) echo $i . '<br />';$testObj = 123;
    echo $testObj;结果:Test Constructor is called.
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Test Destructor is called.
    123当系统确定一个变量不再被使用时就会启动垃圾回收机制的。除非处于安全考虑unset(本人见过有些系统会这样做,但是我觉得安全机制这样保证也没有太大意义),否则没必要unset。
      

  6.   

    本帖最后由 xuzuning 于 2012-06-30 19:45:23 编辑
      

  7.   

    析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行(php手册 语言参考->类与对象->构造函数和析构函数)。利用这一点,就可以知道php什么时候执行了垃圾回收。通常垃圾回收都是在程序结束阶段,但是如果让系统知道这个变量以后不会使用了,php就会启动垃圾回收的。
    class Test
    {
        function __construct()
        {
            echo __CLASS__ . ' Constructor is called.' . '<br />';
        }
        
        function __destruct()
        {
            echo __CLASS__ . ' Destructor is called.' . '<br />';
        }
    }$testObj = new Test();for($i = 0; $i < 10; $i++) echo $i . '<br />';$testObj = 123;     // 这条语句可以让php确定做为Test类的对象的$testObj可以回收,然后重新生成一个int的变量
    echo $testObj;
    因此结果就是:
    Test Constructor is called.
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Test Destructor is called.
    123
    这样我们就看到了垃圾的回收。垃圾回收通过特殊手段是可以看到的。
      

  8.   

    这个可以看手册“垃圾回收机制
    每个变量都有个“引用计数”,当这个“引用计数”为0时就会启动垃圾回收
    $testObj = 123;这句就是使得做为Test类的对象的$testObj的“引用计数”为0。