前言
前几天在Youtube( https://www.youtube.com/watch?v=DoJr5QQYsl8)上看到了一个视频是讲java虚拟机和垃圾收集器原理,我觉得他在提到GC这一段讲得很清楚。所以我想记录下来,一来是怕自己忘了,二来以后有更深的理解之后可以回过头来复盘。
图解GC过程
1 为了配合Java垃圾收集器,堆内存将被分为以下几个区域: young generation(Eden + s0+ s1)、Old generation, permanent generation。新创建的对象会被放到Eden区,在内存中的对象超过了年龄阈值会被放入old generation,permanent generation则是存放运行需要用到的一些class对象,常量信息之类的。
2 新创建的对象会被放到Eden区,当Eden区快满了会触发Minor GC。
3 Minor GC触发后会先把还在被引用的对象放入到 survior 0区。
4 复制完毕后,将Eden区全部清空
5 当Eden区再次被填满时候,又再一次触发Minor GC,这一次会把Eden区和S0区还被引用的对象复制到S1区中。
6 复制完后,清除Eden区和s0区里的对象
7 当Eden区快满时候都会重复以上过程。在s0或者s1中的对象太长时间后会被copy到老年代。
8 当资源不够用的使用才会触发Major GC去清理 老年代的对象。
总结
这只是一个简单的过程说明,如果还想再了解更多的细节还是需要去多查阅些资料。下篇文章希望自己能把类加载过程描述出来。