JVM-参数配置(八)

一、JVM参数类型

1.1 标配参数

java -version
 
java -help
 
java -showversion

在这里插入图片描述
在jdk各个版本之间稳定,很少有大的变化

1.2 X参数

-Xint:解释执行
 
-Xcomp:第一次使用就编译成本地代码
 
-Xmixed:混合模式

在这里插入图片描述

1.3 XX参数

(1)jdk的调试工具:
在这里插入图片描述
如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少?

jps -l #查看进程号
 
jinfo -flag PrintGCDetails 进程号 #查看该进程号是否开启某个参数

在这里插入图片描述
(2)XX参数之Boolean类型

公式:
-XX:+或者- 某个属性值

+表示开启, -表示关闭

在这里插入图片描述
在这里插入图片描述

1.是否打印GC收集细节
-XX:+PrintGCDetails
-XX:-PrintGCDetails
2.是否使用串行垃圾收集器
-XX:+UseSerialGC
-XX:-UseSerialGC

(3)XX参数之KV设置类型

1.公式
 
-XX:属性key=属性值value
 
2.Case
 
-XX:MetaspaceSize=128m  #指定元空间大小
 
-XX:MaxTenuringThreshold=15  #指定经历了多少次GC不死的对象可以进入老年代

不配置任何参数,查看默认值:
在这里插入图片描述
在这里插入图片描述

配置更新参数,重新查看:
在这里插入图片描述
在这里插入图片描述
(4)jinfo举例,如何查看当前运行程序的配置

jinfo -flag 配置项 进程编号

在这里插入图片描述
Command line表示我们后台修改过的值

(5)经典参数

-Xms和-Xmx
 
-Xms: 等价于-XX:InitialHeapSize初始化堆内存
 
-Xmx: 等价于-XX:MaxHeapSize最大堆内存

这两个参数也还是属于XX参数,只不过这两个参数常用,所以,就起了一种别名来代替复杂的名字

二、查看JVM默认值

2.1 -XX:+PrintFlagsInitial

-XX:+PrintFlagsInitial:查看初始默认值
 
java -XX:+PrintFlagsInitial -version
 
java -XX:+PrintFlagsInitial

在这里插入图片描述

2.2 -XX:+PrintFlagsFinal

-XX:PrintFlagsFinal:主要查看修改更新
 
java -XX:+PrintFlagsFinal
 
java -XX:+PrintFlagsFinal -version

在这里插入图片描述

"="是默认加载的值,“:=”是JVM修改过或人为修改过的。

PrintFlagsFinal举例,运行Java程序的同时打印出参数
1、第一次运行程序查看初始值:

java -XX:+PrintFlagsFinal -version

在这里插入图片描述
在这里插入图片描述
2、第二次加上参数再运行程序

java -XX:+PrintFlagsFinal -Xss128k Test

在这里插入图片描述
在这里插入图片描述

2.3 -XX:+PrintCommandLineFlags

java -XX:+PrintCommandLineFlags -version

在这里插入图片描述

三、常用基本配置参数

3.1 元空间

在这里插入图片描述

long totalMemory = Runtime.getRuntime().totalMemory();  //返回java虚拟机中的内存变量
long maxMemory = Runtime.getRuntime().maxMemory(); //返回java虚拟机试图使用的最大内存量
System.out.println("TOTAL_MEMORY(-Xms) = " + totalMemory + " (字节) 、" +(totalMemory / (double)1024 / 1024 + "MB"));
System.out.println("MAX_MEMORY(-Xmx) = " + maxMemory + " (字节) 、" +(totalMemory / (double)1024 / 1024 + "MB"));

3.2 常用参数

3.2.1 -Xms

堆初始大小内存,默认为物理内存1/64
-Xms等价于-XX:InitialHeapSize

3.2.2 -Xmx

堆最大分配内存,默认为物理内存1/4
-Xmx等价于-XX:MaxHeapSize

3.2.3 -Xss

设置单个线程的栈空间大小,一般默认为512K-1024K
-Xss等价于-XX:ThreadStackSize

系统出厂默认值是跟平台有关,一般生产环境都是部署到linux系统(也即1024KB)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.4 -Xmn

-Xmn 
设置年轻代大小,一般都不用设置,一般都是用默认的即可
年轻代占堆的1/3,年老代占堆的2/3

3.2.5 -XX:MetaspaceSize

设置元空间大小
-XX:MetaspaceSize

元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:

元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。不管是几个G的内存,元空间默认都只占用20多M

java -XX:+PrintFlagsFinal -version

在这里插入图片描述
在这里插入图片描述
虽然,机器内存有16G,但是实际元空间默认只占了约21M,如果频繁反复的去new一些对象,就可能把这个给撑爆,为了避免元空间OOM,可以将元空间配置的大一些

3.2.6 -XX:+PrintGCDetails

-XX:+PrintGCDetails 输出详细GC收集日志信息

在这里插入图片描述
在这里插入图片描述
GC日志介绍
在这里插入图片描述
FullGC日志介绍
在这里插入图片描述

3.2.7 -XX:SurvivorRatio

在这里插入图片描述

设置新生代中eden和S0/S1空间的比例
默认
-XX:SurvivorRatio=8, Eden:S0:S1=8:1:1
假如
-XX:SurvivorRatio=4, Eden:S0:S1=4:1:1
SurvivorRatio值就是设置eden区的比例占多少,S0/S1相同

在这里插入图片描述
在这里插入图片描述

3.2.8 -XX:NewRatio

配置新生代与老年代在堆结构的占比
 
默认
 
-XX:NewRatio=2 新生代占1,老年代占2,年轻代占整个堆的1/3
 
假如
 
-XX:NewRatio=4 新生代占1,老年代占4,年轻代占整个堆的1/5
 
NewRatio值就是设置老年代的占比,剩下的1给新生代

在这里插入图片描述
在这里插入图片描述

3.2.9 -XX:MaxTenuring Threshold

-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代被回收的概率。

-XX:MaxTenuringThreshold 设置垃圾最大年龄

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、典型设置案例

查看初始参数:
在这里插入图片描述
打印结果
在这里插入图片描述

-XX:InitialHeapSize=266207424
-XX:MaxHeapSize=4259318784
-XX:+PrintCommandLineFlags
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:-UseLargePagesIndividualAllocation
-XX:+UseParallelGC 并行垃圾收集器

更改参数

-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 串行垃圾收集器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值