请谈谈你对JVM的理解?java8的虚拟机有什么更新?
什么事OOM?是什么StackOverflowError?有哪些方法分析?
JVM的常用参数调优你知道哪些?
谈谈JVM中,对类加载器的认识?
对于JDK自带的JVM监控和性能分析工具用过哪些?一般怎么用
是什么
命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。
性能分析工具
你平时工作用过的JVM常用基本配置参数有哪些?
基础知识
case
常用参数
-Xms
初始化大小内存,默认为物理内存1/64
等价于-XX:InitialHeapSize
-Xmx
最大分配内存,默认物理内存的1/4
等价于-XX:MaxHeapSize
-Xss
设置单个线程栈的大小,一般默认为512K~1024K
等价于-XX:ThreadStackSize
- -XX:ThreadStackSize = 0 , 表示使用默认512K~1024K
- -XX:ThreadStackSize != 0 , 表示使用自己设置的
-Xmn
设置年轻代大小,一般不需要改动
-Xms128m -Xmx4096m -Xss1024k -XX:MetaSpaceSize=512m -XX:+PrintCommandFlags -XX:+PrintGCDetails -XX:+UseSerialGC
-XX:MetaspaceSize
元空间的本质和永久代类似,都是对JVM规范中方法区的实现。
不过元空间与永久代之间最大的区别在于:
- 永久代在堆里面
- 元空间并不在虚拟机中,而是使用本地内存。
因此,在默认情况下,元空间的大小仅受本地内存限制
eg:
Xms10m -Xmx10m -XX:MetaspaceSize=1024m -XX:+PrintFlagsFinal
初始值约21M,也就是说只占用本地内存的21M,如果你频繁的new对象,有可能就会把元空间撑爆从而发生元空间异常,因此需要调大一些
-XX:+PrintGCDetails
GC
FullGC
-XX:SurvivorRatio (了解)
-XX:NewRatio (了解)
-XX:MaxTenuringThreshold (了解)
设置垃圾的最大年龄
jvm典型配置案例
-Xms128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC
输出结果
-XX:InitialHeapSize=134217728
-XX:MaxHeapSize=4294967296
-XX:MetaspaceSize=536870912
-XX:+PrintCommandLineFlags
-XX:+PrintGCDetails
-XX:ThreadStackSize=1024
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:-UseLargePagesIndividualAllocation
-XX:+UseSerialGC
HelloGC
Heap
def new generation total 39296K, used 2796K [0x00000006c0000000, 0x00000006c2aa0000, 0x0000000715550000)
eden space 34944K, 8% used [0x00000006c0000000, 0x00000006c02bb048, 0x00000006c2220000)
from space 4352K, 0% used [0x00000006c2220000, 0x00000006c2220000, 0x00000006c2660000)
to space 4352K, 0% used [0x00000006c2660000, 0x00000006c2660000, 0x00000006c2aa0000)
tenured generation total 87424K, used 0K [0x0000000715550000, 0x000000071aab0000, 0x00000007c0000000)
the space 87424K, 0% used [0x0000000715550000, 0x0000000715550000, 0x0000000715550200, 0x000000071aab0000)
Metaspace used 3084K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 335K, capacity 388K, committed 512K, reserved 1048576K
- -XX:+UseSerialGC : 串行垃圾回收器
- -XX:+UseParalleGC :并行垃圾回收器请谈谈你对JVM的理解?java8的虚拟机有什么更新?
什么事OOM?是什么StackOverflowError?有哪些方法分析?
JVM的常用参数调优你知道哪些?
谈谈JVM中,对类加载器的认识?
你说你做过JVM调优和参数配置,请问如何查看JVM系统默认值
JVM的参数类型
标配参数 (了解)
- -version
- -help
- java -showversion
x参数(了解)
- -Xint:解释执行
- -Xcomp:第一次使用就编译成本地代码
- -Xmixed:混合模式
xx参数(重点)
Boolean类型
公式
-XX:+或者-某个属性值
+表示开启 -表示关闭
如何查看一个正在运行中的java,它的jvm参数是否开启?具体参数是多少
jps: 查看java后台进程
jinfo: 正在运行的java程序后台信息
eg:jinfo -flag PrintGCDetails 进程号
case
是否打印GC收集细节
- -XX:-PrintGCDetails —> 没有开启
- -XX:+PrintGCDetails —-> 开启
eg: 以IDEA为准,演示没有加JVM参数 -XX:+PrintGCDetails
- 编辑配置,开启GC收集细节
是否使用串行垃圾回收器
- -XX:-UseSerialGC
- -XX:+UseSerialGC
KV设值类型
公式
-XX:属性key=属性值value
Case
-XX:MetaspaceSize=128m : 元空间大小
-XX:MaxTenuringThreadhold=15
jinfo举例,如何查看当前运行程序的配置
公式
jinfo -flag 配置项 进程编号
- case1
- case2
Non-default Vm: JVM做的
Command line: 人工添加的
- case3
JVM的XX参数之XmsXmx坑题
两个经典参数:-Xms和-Xmx
这个你如何解释?
-Xms:等价于-XX:InitialHeapSize
-Xmx:等价于-XX:MaxHeapSize
盘点家底查看JVM默认值
-XX:+PrintFlagsInitial
作用
主要查看初始默认
公式
- java -XX:+PrintFlagsInitial -version
- java -XX:+PrintFlagsInitial
-XX:+PrintFlagsFinal
作用
主要查看修改更新
公式
- java -XX:+PrintFlagsFinal -version
:= 和 =区别
=
: jvm默认加载的:=
: jvm或者用户修改过的
PrintFlagsFinal举例,运行java命令的同时打印出参数
- 初始元空间大小,注意这时候没有
:=
,说明是jvm默认值
uintx MetaspaceSize = 21807104 - 运行java 修改元空间大小
-XX:+PrintCommandLineFlags
作用
打印命令行参数
公式
java -XX:+PrintCommandLineFlags -version