这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
WangScaler: 一个用心创作的作者。
声明:才疏学浅,如有错误,恳请指正。
jvm的参数有很多,也是面试中面试官最常问的问题之一。在平时开发过程中你使用过哪些参数?让我们先来看看以下最常见的jvm参数。
参数分类
-
1、标准参数(-)
除了我们最基本的-version:查看版本号、-jar:以jar包的形式运行程序、-showversion:输出版本信息、-help:帮助外,以下参数也是比较有用的。
- -verbose:class 当程序出现找不到类或者类冲突时可以用这个参数输出jvm载入类的相关信息来进行诊断。
- -verbose:gc 输出每次GC的相关情况。
- -verbose:jni输出native方法调用的相关情况,一般用于诊断jni调用错误信息。
-
2、非标准参数(-X)
- -Xint:仅解释执行
- -Xcomp:第一次使用就编译成本地代码,从而带来最大程度的优化。
- -Xmixed:JVM的默认模式,也是推荐模式。将解释模式和变异模式进行混合使用的混合模式。
-
3、非Stable参数(-XX)
- -XX:NewRatio:设置新生代比例。
- -XX:SurvivorRatio:设置幸存区的比例,
有三种类型
1、布尔型 -XX:+(-)属性值:+表示开启,-表示关闭
2、数字型参数选项 --XX:属性=
3、字符串型参数选项--XX:属性=
值得注意的是我们常见的-Xms和-Xmx都是-XX类型的参数,而不是-X类型的参数,这也是面试官可能问到的问题。那么为什么是-XX类型的呢?因为-Xms等价于-XX:InitialHeapSize即初始堆内存,而-Xmx等价于-XX:MaxHeapSize即最大堆内存,-Xss等价于-XX:TheadStackSize,-Xmn(等价于-XX:newSize 和 -XX:MaxnewSize)同时设置年轻代大小和年轻代的最大大小。
查看
我们如何查看我们的jvm参数呢?有两种办法
1、查看默认设置
java -XX:+PrintFlagsInitial -version
该命令可以查看所有JVM参数启动的默认初始值。
java -XX:+PrintFlagsFinal -version
该命令可以查看所有JVM参数,其中:=表示的值为修改的值。
java -XX:+PrintCommandLineFlags -version
可以查看被用户修改过的参数。
2、jinfo
可以通过jps查看进程号,类似于linux的ps
jinfo -flag 进程号
jinfo -flags 进程号
常用的配置
| 参数 | 介绍 |
|---|---|
| -Xms | 初始堆内存,物理内存的1/64。 |
| -Xmx | 最大堆内存,物理内存的1/4。 |
| -Xss | 每个线程栈空间大小,默认值为512k~1024K。相同配置下,这个值越小,则生成的线程越多。 |
| -Xmn | 设置新生代的大小。 |
| -XX:MetaspaceSize | 设置元空间的大小。大小受限于本地内存的限制,因为元空间直接使用的本地内存。 |
| -XX:+PrintGCDetails | 打印垃圾回收的信息。 |
| -XX:SurvivorRatio | 幸存区的比例,默认1(From):1(To):8(Eden) |
| -XX:NewRatio | 设置新生代比例,默认1(新生代):2(老年代) |
| -XX:MaxTenuringThreshold | 设置垃圾最大年龄,只能设置在0-15之间。如果设置为0,则直接进入老年代,而不进入Survivor区。对于老年代较多的应用,能提高效率。 |
其中-XX:+PrintGCDetails如下图所示:
声明:图片转载自JVM参数介绍与相关配置,如有违规,联系删除。
还可以通过以下三个参数来切换GC的方式。
- -XX:+UseSerialGC:设置串行GC。
- -XX:+UseParallelGC:设置并行GC,考虑吞吐量优先可以选择。
- -XX:+UseConcMarkSweepGC:设置并发GC,考虑响应时间优先可以选择。
来都来了,点个赞再走呗!
关注WangScaler,祝你升职、加薪、不提桶!