阅读 131

常见的JVM参数

这是我参与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,祝你升职、加薪、不提桶!

文章分类
后端
文章标签