1、学习记录
a、垃圾确认算法
**引用计数(referenc count)**--- 记录指向对象引用的数量,缺点:循环引用垃圾无法判断。
**根可达算法(root searching)**--- 根对象不可达对象即为垃圾。一个具有注脚的文本。
根对象1
b、垃圾回收算法
mark-sweep、copying、mark-compact
c、垃圾回收器
目前存在的垃圾回收器包括:
有物理分区:young区使用(serial 、parNew、parallel scavenge)、old区使用(CMS、serial old 、parallel old)
无物理分区,存在yonge.old逻辑分区:G1
无物理分区,无逻辑分区:ZGC、shenandoah
windows使用命令查看垃圾回收器:java -XX:+PrintCommandLineFlags -version
jdk8默认ps+po(parallel scavenge + parallel old)
jdk9-jdk13默认G1
d、体会
垃圾回收算法沿着计算机内存,算力的发展,由初代支持单线程垃圾回收(serial 、
serial old)---->发展为并行(parallel scavenge 等) --->发展为并发(CMS)。
同时在优化过程中对于yong (enden ,survivor survivor),old区的物理分区.、逻辑分区同时存在,
到G1的只存在逻辑分区(主要分块region,每个region在不同时间条件可能是不同的逻辑类型,如:eden、old等),再往后发展,也会淡化逻辑分区的概念。
2、垃圾回收器参数记录
a、GC常用参数
- -Xmn -Xms -Xmx -Xss
年轻代 最小堆 最大堆 栈空间 - -XX:+DisableExplictGC
禁用System.gc() (使用此命令为FGC) - -XX:+PrintGC
- -XX:+PrintGCDetails
- -XX:+PrintHeapAtGC
- -XX:+PrintGCTimeStamps
- -verbose:class
类加载详细过程 - -XX:+PrintVMOptions
- -XX:+PrintFlagsFinal -XX:+PrintFlagsInitial
最终使用参数值,初始化参数值(所有) - -Xloggc:opt/log/gc.log
- 设置gc日志
- -XX:MaxTenuringThreshold
升代年龄,最大值15
b、CMS常用参数
- -XX:+UseConcMarkSweepGC 开启CMS垃圾回收器
- -XX:ParallelCMSThreads
CMS线程数量 - -XX:CMSInitiatingOccupancyFraction
使用多少比例的老年代后开始CMS收集,默认是68%(近似值,jdk8本地测试,大约62%)
c、G1常用参数
- -XX:+UseG1GC 开启G1垃圾回收器
- -XX:+G1HeapRegionSize
分区大小,建议逐渐增大该值,1 2 4 8 16 32。
size大小的设置需平衡,过大过小均由缺点 - G1NewSizePercent
新生代最小比例,默认为5% - G1MaxNewSizePercent
新生代最大比例,默认为60% - GCTimeRatio
GC时间建议比例,G1会根据这个值调整堆空间 - ConcGCThreads
线程数量 - InitiatingHeapOccupancyPercent
启动G1的堆空间占用比例
根对象包括:JVM stack ,native method stack,runtime constant pool,static reference in method area,Clazz ↩︎