GCROOT
JVM的参数配置
三个参数类型
标配参数:
X参数:
混合类型、执行、编译
XX参数
Boolen类型
jps -l得到一个程序的进程号
jinfo -flag PrintGCDetails 进程号
可以查看某一个参数是否激活
KV设置类型
jinfo -flags 进程号可以得到所有的消息
其中Non-default VM flag系统默认的
commad line为人为修改的
查看JVM默认值
java -XX:+PrintFlagsInitial
【=-没改过JVM默认加载、:=被人为改过】
jvm常用的基本配置参数
典型的设置案例
运行结果:
ygc
fgc
强引用、软引用、弱引用、虚引用分别是什么
强引用
软引用
弱引用
weekhashmap
虚引用
被回收的时候会放到引用队列保存虚引用
总结
OOM
java.lang.StackOverflowError
深度的自我递归容易导致【栈溢出】
Java.lang.OutOfMemoryError:Java heap space
无限产生新的对象容易导致【堆溢出】
Java.lang.OutOfMemeoryError:GC overhead limit exceeded
【GC溢出】超过98%的时间用来做GC时触发。比如不断的往一个list里边插入值
Java.lang.OutOfMemeoryError:Direct buffer memory
【内存溢出】
Java.lang.OutOfMemeoryError:unable to create new native thread
【线程溢出】
Java.lang.OutOfMemeoryError:Metaspace
【元空间溢出】
GC
垃圾回收器
GC算法(引用计数/复制/标清/标整)是内存回收的方法论,垃圾收集器就是算法落地实现
因为目前为止还没有完美的收集器出现,更加没有万能的收集器,只是针对具体应用最合适的收集器,进行分代收集
串行垃圾回收器(Serial)
它为单线程环境设计并且只使用一个线程进行垃圾回收,会暂停所有的用户线程。所以不适合服务器环境
并行垃圾回收器(Parallel)
多个垃圾回收线程并行工作,此时用户线程是暂停的,适用于科学计算/大数据处理等弱交互场景
并发垃圾回收器(CMS)
用户线程和垃圾收集线程同时执行(不一定是并行,可能交替执行),不需要停顿用户线程
互联网公司多用它,适用于对响应时间有要求的场景
G1垃圾回收器
G1垃圾回收器将堆内存分割成不同的区域然后并发的对其进行垃圾回收
查看默认的垃圾收集器
垃圾回收器的选择
串行GC(Serial)/(Serial Coping)
并行GC(ParNew)
并行回收GC(Parallel)/(Parallel Scavenge)
总结
G1
G1特点
G1的四步
JVMGC+SpringBoot微服务的生产部署和参数调优