java的System.gc()的理解

108 阅读1分钟

目录

什么是System.gc()

实例1

实例2


什么是System.gc()

1.在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。

2.然而,System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。

3.JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个性能基准,我们可以在运行之间调用System.gc()。

实例1

System.gc()表示提醒jvm的垃圾回收器执行gc,但是不确定是否马上执行gc。

System.gc()与Runtime.getRuntime().gc()是一样的。

System.runFinalization()一定会强制调用失去引用的对象的finalize方法。

实例2

结果:

localvarGC1没有回收。

localvarGC2回收了。

localvarGC3没有回收。

localvarGC4回收了。

localvarGC5回收了。