Runtime类的gc不是立刻运行垃圾回收机制吗,运行垃圾回收不就是运行finalize 方法吗,
怎么runtime类里面还有一个runFinalization方法,我看注释写得是运行finalize方法,
我想问一下,gc和runFinalization这两个方法有什么区别,高手帮忙解释一下,在此先谢过了!

解决方案 »

  1.   

    gc是垃圾回收器,它在回收废弃对象时,会调用将要回收对象的finalize方法
    这只是第一步,接下来就要释放对象的内存了。
    而runFinalization方法,按你说的只是运行finalize方法,当然不同了
      

  2.   

    楼上的意思是不是说垃圾回收的时候不只运行对象的finalize方法,还会有一些其他的操作。
    那是我理解错了,我以前一直以为垃圾回收就是调用一下finalize方法,别的就什么也不做了。楼上的能说得更明白一些吗,比如finalize方法里面是怎么写的,还有垃圾回收的时候除了finalize 方法之外还会做别的什么操作。 谢谢了!
      

  3.   

    gc不是立刻运行垃圾回收,而finalize也不是你运行了gc就执行的你也不知道他什么时候执行的。
    垃圾回收只与内存有关。runFinalization这倒有一个讨论的http://book.77169.org/3930/3930352.htm
      

  4.   

    、、
    这个帖子不错!“gc在大部分状况下会将没有任何指向的引用的内存释放掉,除非在特殊情况下,最好不要干涉gc!
    runFinalization()方法在调用时它会尽量去调用这个对象的finalize方法!
    都是强制gc去回收内存,其它大部分相似!”
      

  5.   

    关于System.gc()和finalize()
    http://blog.tom.com/moonhippo/article/1642.html
      

  6.   

    gc()并不是马上启动gc进行垃圾回收,而是相当于程序提出建议,建议虚拟机回收垃圾,但是具体什么时候回收垃圾是由虚拟机决定的。各种虚拟机的gc机制并不相同,因为运行gc也要耗费资源,所以大多数时候虚拟机是在分配给它的系统资源即将耗尽的时候才启动gc线程,可以理解为调用gc()方法可以提高gc线程的优先级吧。另外,一般的gc算法的基本原理是引用记数,比如你创建了一个对象,虚拟机会计算指向这个对象的引用,如果没有任何一个引用指向这个对象了,这个对象便在垃圾回收的范畴,这样当gc机制启动时便会将这个对象回收。回收这个对象时,虚拟机会先调用对象的finalize方法,这个方法是Object类的方法,自定义类中可以重写这个方法来实现对象被垃圾回收前进行相应的操作。runFinalization方法和finalize方法好像没有什么直接联系吧。
      

  7.   

    finalize方法本身和gc的垃圾回收其实没有直接的关系,他就是类中的一个方法,只不过是gc回收垃圾对象时会先调用这个方法,所以可以重写这个方法定义一些操作,在对象被回收之前执行。