大厂面试题:
1、JVM垃圾回收时候如何确定垃圾?是否知道什么是GC Roots
2、你说你做过JVM参数调优和参数配置,请问如何盘点查看JVM系统默认值
3、你平时工作中用过的JVM常用基本配置参数有哪些?
4、强引用、软引用、弱引用、虚引用费别是什么?
5、请你谈谈对OOM的认识
6、GC垃圾回收算法与垃圾收集器的关系?分别是什么请你谈谈?
7、 怎么查看服务器默认的垃圾回收器是哪一个?
生产上如何配置垃圾收集器的?
谈谈你对垃圾收集器的理解?
8、G1垃圾收集器
9、生产环境服务器变慢,诊断思路和性能评估谈谈?
10、假如生产环境CPU占用过高,请谈谈你的分析思路和定位。
11、对于JDK自带的监控和性能分析工具用过哪些?一般你怎么用的?
java -version
java -help
java -showversion
在JDK各个版本之间稳定,很少有大的变化。
-Xint 解释执行
-Xcomp 第一次使用就编译成本地代码(先编译)
-Xmixed 混合模式(先编译后执行)
【1】Boolean类型XX参数
公式:-XX:+ 或者-XX:- 某个属性值(+表示开启,-表示关闭)
案例:
1)是否打印GC收集细节
-XX:+PrintGCDetails
-XX:-PrintGCDetails
2)是否使用串行垃圾收集器
-XX:+UseSerialGC
-XX:-UserSerialGC
代码验证:
没有配置任何JVM -XX:+某个属性值
启动main方法
在Terminal使用JDK工具查看是否配置JVM参数
jps -l 表示查看java运行的进程号
jinfo -flag PrintGCDetails 表示查看JVM是否配置PrintGCDetails参数
-XX:-PrintGCDetails 中减号表示没有配置PrintGCDetails参数
配置JVM -XX:+PrintGCDetails参数
重新启动main方法
重新在Terminal使用JDK工具查看是否配置JVM参数
jps -l 表示查看java运行的进程号
jinfo -flag PrintGCDetails 表示查看JVM是否配置PrintGCDetails参数
-XX:+PrintGCDetails 中加号表示配置了PrintGCDetails参数
【2】KV设值类型
公式:-XX: key(属性)= value(属性值)
案例:
查看-XX:MetaspaceSize=默认值大小
-XX:MetaspaceSize=21807104(大约22MB)
添加-XX:MetaspaceSize=1024m参数
查看-XX:MetaspaceSize=人工设置值大小
-XX:MetaspaceSize=1073741824(1024MB)
查看-XX:MaxTenuringThreshold=默认值大小
-XX:MaxTenuringThreshold=15表示年轻代对象年龄达到15岁就会进入老年代
【3】jinfo查看当前运行程序配置
公式:jinfo -flag 配置项 进程号
案例:
查看JVM所有配置项(默认+人工配置)
jinfo -flags 进程号
Non-default VM flags表示JVM默认参数
Command line表示人工配置参数
人工配置的JVM参数
【4】如何解释-Xms和-Xmx参数属于XX参数
-Xms和-Xmx两个经典参数看起既不像Boolean类型XX参数,也不像KV设值类型XX参数。那为什么-Xms和-Xmx又属于XX参数?
-Xms = -XX:InitialHeapSize
-Xmx = -XX:MaxHeapSize
jinfo -flag 参数项 进程号
jinfo -flags 进程号
公式:java -XX:+PrintFlagsInitial(查看jvm未更改的默认参数)
公式:java -XX:+PrintFlagsFinal(查看jvm已经更改过的参数)
:=表示jvm启动时候默认修改或者人工更改过的参数
=表示jvm没有更改过的默认参数
uintx InitialHeapSize := 266338304 {product} 默认为操作系统64/1内存(我本机内存为16G)
本机内存:
运行java命令的同时打印jvm参数
java -XX:+PrintFlagsFinal UpdateJVMParamDemo