一、JVM主要分为三部分 {a.类加载器 b.内存区域 c.字节码执行引擎}
a.类加载器是将java字节码类加载到内存区域中
b.内存区域分为 1.堆 2.栈 3.本地方法区 4.方法区(元空间) 5.程序技术器
c.字节码执行引擎
二、堆
堆分为 1.eden区 2.S0 3.S1 4.老年区
其中老年区占2/3
eden : S0 : S1=8:1:1
minor gc发生在eden S0 S1 中 使用
可达性分析算法:将GC ROOTS对象作为起点,从这些起点开始向下搜索引用对象,找到对象都标记为非垃圾对象,将其放入survivor中,其余未标记的对象都是垃圾对象。
其中GC ROOTS是:线程栈中的本地变量,静态变量,本地方法栈的变量
1.如何判定垃圾(引用计数法,可达性分析算法)
可达性分析算法中的GC Roots是线程栈中的变量,静态变量,本地方法栈中的变量
可达性分析算法:将GC roots对象作为起点,从这些节点开始向下搜索引用的对象,找到的对象都是非来及对象
引用计数法:给对象中加一个引用计数器,每当一个变量引用时就加一,当引用失效时就减一,直到程序计数器为0则可视该对象为垃圾对象
2.垃圾回收方法(标记清除,复制,标记整理)
3.垃圾收集器(parallel scavenge/parael old,serial/serial old,parnew/cms,G1,ZGC,shenandoah)
其中年轻代都是用的复制算法
serial old用的标记整理算法
cms用的是标记清除算法
parallel old用的是标记整理算法