目录
什么是GC Roots
因为确立垃圾的方法有引用记数法,但是会产生循环引用,所以引出了另一种方法叫可达性分析,
基本思想是通过一系列名为“GC Roots”的对象作为起始点,向下搜索,能被遍历到的就判定为存活,否则为死亡。要经过两次标记。
Java中可以作为GC Roots的对象有哪些
1.虚拟机栈(栈帧中的局部变量区,也叫局部变量表)中引用的对象。
2.方法区中的类静态属性引用的对象。
3.方法区中常量引用的对象。
4.本地方法栈中JNI引用的对象。
JVM调优
JVM的参数类型:
1.标配参数,如-version , -help ,Java -showversion
2.X参数(了解)如 -Xint ,-Xcomp , -Xmixed
3.XX参数(重点)
(1)Boolean类型 查找某个jvm参数是否开启 公式: -XX:+或者- 某个属性值; 其中+表示开启,-表示关闭
jps -l 看所有正在运行的Java程序,jinfo -flag printGCDetails 参数看一个正在运行的Java程序
(2)KV设值类型 公式: -XX:属性key=属性值value 查看某个参数的具体值
元空间默认为21M左右。可以设置元空间大小,也可以设置MaxTenuringThreshold=15即进入老年区的年龄。
还有以下命令: jinfo -flags 进程参数 查某个参数的所有,类似模糊查询。
两个经典参数 -Xms -Xmx也属于以上几种
-Xms等价于-XX:InitialHeapSize; Xmx等价于-XX:MaxHeapSize
重点命令: -XX:+PrintFlagsInitial 查看参数盘点家底,能查看并打印所有初始默认参数
-XX:+PrintFlagsFinal -version 查看修改更新后的参数值
其中直接=的是默认初始值,有:=的是改过的值
JVM常用的基本配置参数有哪些
-Xms 初始内存大小,默认物理内存的1/64 -Xmx 最大分配内存,默认物理内存的1/4
-Xss 设置单个线程栈的大小,默认为512k~1024k 等价于 -XX:ThreadStackSize
-Xmn 设置年轻代的大小,一般用默认
-XX:MetaspaceSize 设置元空间的大小,受本地内存的限制,默认为21M
-XX :printGCDetails 打印GC收集日志 -XX :survivorRatio 默认是6:1:1
-XX :newRatio 默认是1:2
-XX :MaxTenuringThreshold 设置垃圾最大年龄 默认是15