Full GC属于Java垃圾收集的重要内容,而且Java面试也常考,下面重点详解Full GC的作用与触发过程@mikechen
什么是Full GC
Full GC,全程是Full Garbage Collection,是Java虚拟机中的一种垃圾回收方式。
Full GC会在整个堆空间中执行垃圾回收,清理所有不再被引用的对象所占用的内存空间。
Full GC通常是在年老代空间或者整个堆空间被占满时触发的,它会清理所有的年老代对象和永久代对象。
Full GC作用
Full GC的作用是在JVM执行垃圾回收时对整个堆空间进行清理,释放不再被引用的对象所占用的内存空间,以便后续的对象分配。
触发FullGC
Full GC通常在以下情况下被触发:
1.堆空间不足
当堆空间的可用空间不足以分配新对象时,会触发Full GC,在这种情况下,Full GC会清理整个堆空间。
2.调用System.gc()方法
调用System.gc()方法可以触发Full GC,虽然调用System.gc()方法不能保证立即触发Full GC,但它可以提醒JVM尽快执行垃圾回收。
3.老年代空间满了
当老年代空间被占满时,也会触发Full GC。
如果老年代空间被占满,说明这些长时间存活的对象已经占用了大量的内存空间,需要进行Full GC来释放这些不再被引用的对象所占用的内存空间。
Full GC过程
Full GC是一种比较耗时的操作,因为它需要扫描整个堆空间,找到所有不再被引用的对象,并将它们标记为可回收的。
Full GC过程包括以下几个步骤:
1.标记(Mark)
从根节点开始遍历对象图,标记所有被引用的对象。
2.可达性分析(Reachability Analysis)
检查所有被标记的对象,如果它们的所有引用都被标记,那么它们是可达的,否则它们是不可达的。
3.清除(Sweep)
清除所有不可达的对象,释放它们占用的内存空间。
4.压缩(Compact)
将所有存活的对象移动到堆空间的一端,压缩内存空间,以便后续对象的分配。
以上就是Full GC的详解,更多JVM请查看:JVM(Java虚拟机)从0到1全部合集
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》