JVM堆内存

堆内存

总600m 老年代占2/3,新生代1/3 ,新生代的eden8/10,survivor区1/10
在这里插入图片描述

堆内存总体分为年轻代和老年代。
年轻代又有eden区和suivivor区。suivivor区分为from区域和to区域。
堆用来存放对象,new的对象都会放入eden,eden区满了触发minor gc,字节码执行引擎执行垃圾回收,根据可达性算法回收垃圾,垃圾回收之后存活下来的对象放入from区域,对象的分代年龄+1(分代年龄存放在对象的Object Header中),from区域有对象之后(eden又满了,第二次gc),gc也会清理from区域,把eden和from存活的对象放入to区域。from和to总有一块是空着的,来回拷贝(使用复制算法)。经历15次GC还存活的对象会被放入老年代(线程池,缓存对象,spring bean等)

可达性算法:先找到所有的GC ROOTS 根作为起点,向下搜索引用的对象,找到的对象都标记为非垃圾对象
可以当作GC ROOTS 根的节点:线程栈的本地变量(局部变量)/静态变量/本地方法栈等

当老年代被放满之后会触发FULL GC(回收堆和方法区),FULL GC会停掉应用线程(STW 咋瓦鲁多)
JVM调优核心目的:FULL GC时间短一些,或者FULL GC次数少一些

对象头存放很多重要信息,分代年龄,锁状态等
在这里插入图片描述