JVM学习(二)

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、可以精准定义垃圾回收器的回收时间

上一篇:G1垃圾回收器


下一篇:垃圾收集器