内存结构概述
堆内存与垃圾回收
堆内存分配
伊甸园区 | s1 |
s2 | Old |
年轻代为伊甸园区和幸存去1、2,空间占比为8:1:1,老年代为Old,新生代与老年代空间占比为1:2。
垃圾回收过程
1.开始创建对象时,如果大对象无法放入伊甸园区,会直接放入老年代。
2.当伊甸园区空间满了进行第一次垃圾回收,将有用对象放入s1区,对象年龄+1。
3.当伊甸园区空间满了和s1空间一起进行第二次垃圾回收,将有用对象放入s2区,对象年龄+1。
4.当幸存区的对象年龄到了15还未被回收,放入老年代。
5.当幸存区的对象按照年龄大小排序之后,占空间百分之五十后面的对象放入老年代。
6.当复制给幸存区的对象无法装下时,放入老年代。
7.在进行YGC之前,判断如果年轻代所有对象所占空间大于老年代剩余连续空间时,先进行fullGC,再进行YGC。
- 年轻代:使用停止-复制算法进行清理
- 老年代:标记-整理算法:标记处仍然存活的对象,将所有存活的对象向一端移动,以保内存的连续。
字节码与类的加载
切记类加载有一个半初始化过程。
先默认赋值->具体赋值->对象引用。