finalize与System.gc()

Posted wzyxidian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了finalize与System.gc()相关的知识,希望对你有一定的参考价值。

finalize

Finalize是Object类的一个方法,可以用来被重写

finalize的工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存.所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作.

问题:finalize()在什么时候被调用?
回答:
有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.
2.程序退出时为每个对象调用一次finalize方法。
3.显式的调用finalize方法

System.gc();

 public static void gc() {
        Runtime.getRuntime().gc();
    }

 

  • system.gc其实是做一次full gc
  • system.gc会暂停整个进程
  • system.gc一般情况下我们要禁掉,使用-XX:+DisableExplicitGC
  • system.gc在cms gc下我们通过-XX:+ExplicitGCInvokesConcurrent来做一次稍微高效点的GC(效果比Full GC要好些)
  • system.gc最常见的场景是RMI/NIO下的堆外内存分配等

 

以上是关于finalize与System.gc()的主要内容,如果未能解决你的问题,请参考以下文章

gc方法与finalize方法的区别

System.gc() 和 Runtime.gc(). finalize() 方法

java: system.gc()和垃圾回收机制finalize

每当我们在java中调用System.gc()时,是否必须调用finalize()方法?

System.gc()

finalize方法