none
带析构函数的类的对象一定要经过两轮GC才能真正被垃圾回收么? RRS feed

  • 问题

  • 如果一个对象执行了析构函数之后并没有“复活”,那么理论上应该可以直接回收,没有必要等到下一轮GC,有没有办法在一次GC里就回收这种对象呢?如果目前做不到的话,能否请微软优化一下这一块?
    举个简单的例子,比如我要统计某个类的对象在内存中的个数,那么我可以这样写:
    class example
    {
        static int count=0; /* 个数 */
        ...... 

        public example()
        {
            count++;
            ......
        }

        ~example()
        {
            count--;
        }
    }
    在这里,析构函数是为了实现统计,而不是释放资源,但却也会导致GC被严重拖慢,这代价未免太大了。如果有某种机制能自动检测出这种情况并优化就好了,或者提供个函数让开发者调用以提示编译器某个析构函数执行完可以直接回收该对象也行。
    希望版主能帮我把这个建议反馈给微软。
    2014年3月12日 6:25

答案

全部回复