GC是由JVM自动完成的,根据JVM系统环境而定,所以机制是不确定的,当然我们也可以手动进行垃圾回收,比如调用System.gc()方法通知JVM进行垃圾回收,但是具体什么时候运行也是无法控制的,也就是说我们调用了System.gc()只是通知JVM要去回收,但是什么时候回收是由JVM决定的,但是不建议手动调用该方法,因为GC消耗的资源比较大。
那会触发垃圾回收的情况有以下几种:
1.当Eden区或者S区不够用了
2.老年代空间不够用了
3.方法区空间不够用了
4.System.gc() 执行的是Full GC的操作