GC分类
普通GC
full GC
五、GC的四大算法
分代收集算法:不同区域用不用算法,没有最好,只有最合适
GC引用算法(了解)
GC复制算法
幸存区(S0,S1):这是一个动态变化的区域 from to 谁空谁是to
1、一般普通GC后,Eden区基本是空的
2、每次存活,内容都会复制到to区后,from和to交换,幸存15次后,会复制到Old区
优点:没有标记和消除过程,效率高,没有内存碎片
缺点:需要双倍的空间(to永远是空的)
Eden区存活率低,推荐使用复制算法
GC标记清除算法
Old区推荐使用
优点:不需要额外的空间
缺点:两次扫描,耗时多,会产生内存碎片
GC标记压缩算法
在清除后,再次扫描,进行压缩,减少内存碎片
可达性
由根延伸的所有可遍历的对象,就不是垃圾
GC ROOT
1、虚拟机栈中引用的对象
2、类中静态属性引用的对象
3、方法区中的常量
4、本地方法栈中 Native 方法引用的对象
引用:强引用、软引用、弱引用、虚引用
JVM参数有三种:标配参数、X参数、XX参数
XX: + 或者 - ,+代表开启,-代表关闭,(布尔型)
XX: key = value (型)
-Xms:初始堆大小
-Xmx:最大堆大小
-Xss:线程栈大小 (512k~1024k)
-Xmn:年轻代大小 一般不动
常用的命令都有语法糖
垃圾收集器
1、串行 (STW)
2、并行
3、并发
4、G1 :将堆内存拆分不同区域,并发对其回收
DefNew:默认的新一代
Tenured:老年代
ParNew:并行新一代
PSYoungGen:并行清除年轻代
ParOldGen:并行老年代
G1(Garbage-First)垃圾回收器
1、年轻代和老年代是各自独立的内存区域
2、年轻代使用 eden + s0 + s1 复制算法
3、老年代收集必须扫码整个老年代的区域
4、垃圾回收起原则:尽可能少而块的执行GC为设计原则
G1将堆中的内存打撒,默认为2048块,不同的区间可以并行处理垃圾回收,提高效率
-XX:+UseG1GC
G1的最大亮点:可以添加参数
优点:
1、没有内存碎片
2、可以精准定义垃圾回收器的回收时间