1.JVM常用的参数有哪些?
标准参数
-version
-help
-server
-cp
3.1.2 -X参数
非标准参数,也就是在JDK各个版本中可能会变动
-Xint 解释执行
-Xcomp 第一次使用就编译成本地代码
-Xmixed 混合模式,JVM自己来决定
3.1.3 -XX参数
使用得最多的是参数类型
非标准化参数,相对不稳定,主要用于JVM调优和Debug
a.Boolean类型
格式:-XX:[+-]<name> +或-表示启用或者禁用name属性
比如:-XX:+UseConcMarkSweepGC 表示启用CMS类型的垃圾回收器
-XX:+UseG1GC 表示启用G1类型的垃圾回收器
b.非Boolean类型
格式:-XX<name>=<value>表示name属性的值是value
比如:-XX:MaxGCPauseMillis=500
3.1.4 其他参数
-Xms1000M等价于-XX:InitialHeapSize=1000M
-Xmx1000M等价于-XX:MaxHeapSize=1000M
-Xss100等价于-XX:ThreadStackSize=100
所以这块也相当于是-XX类型的参数
3.1.5 查看参数
java -XX:+PrintFlagsFinal -version > flags.txt
**值得注意的是"="表示默认值,":="表示被用户或JVM修改后的值**
**要想查看某个进程具体参数的值,可以使用jinfo,这块后面聊**
**一般要设置参数,可以先查看一下当前参数是什么,然后进行修改**
由于文章的篇幅有限,老师这里只能为大家展示部分内容,同时JVM相关的问题全部给大家整理成了PDF,需要领取的直接点赞、转发文章之后,私信我【666】获取即可!
3.1.6 设置参数的常见方式
- 开发工具中设置比如IDEA,eclipse
- 运行jar包的时候:java -XX:+UseG1GC xxx.jar
- web容器比如tomcat,可以在脚本中进行设置
- 通过jinfo实时调整某个java进程的参数(参数只有被标记为manageable的flags可以被实时修改)
3.1.7 实践和单位换算
1Byte(字节)=8bit(位)
1KB=1024Byte(字节)
1MB=1024KB
1GB=1024MB
1TB=1024GB
(1)设置堆内存大小和参数打印
-Xmx100M -Xms100M -XX:+PrintFlagsFinal
(2)查询+PrintFlagsFinal的值
:=true
(3)查询堆内存大小MaxHeapSize
:= 104857600
(4)换算
104857600(Byte)/1024=102400(KB)
102400(KB)/1024=100(MB)
(5)结论
104857600是字节单位
3.1.8 常用参数含义
参数 |
含义 |
说明 |
-XX:CICompilerCount=3 |
最大并行编译数 |
如果设置大于1,虽然编译速度会提高,但是同样影响系统稳定性,会增加JVM崩溃的可能 |
-XX:InitialHeapSize=100M |
初始化堆大小 |
简写-Xms100M |
-XX:MaxHeapSize=100M |
最大堆大小 |
简写-Xms100M |
-XX:NewSize=20M |
设置年轻化的大小 |
|
-XX:MaxNewSize=50M |
年轻代最大大小 |
|
-XX:OldSize=50M |
设置老年代大小 |
|
-XX:MetaspaceSize=50M |
设置方法区大小 |
|
-XX:MaxMetaspaceSize=50M |
方法区最大大小 |
|
-XX:+UseParallelGC |
使用UseParallelGC |
新生代,吞吐量优先 |
-XX:+UseParallelOldGC |