[JVM教程与调优] 什么是JVM运行时参数?

什么是JVM运行时参数?

咱们接着上一章节[JVM教程与调优] JVM都有哪些参数类型?的内容继续讲解,这章咱们来介绍一下:如何查看JVM运行时参数。这一点十分重要,由于咱们在进行JVM参数调优的时候,咱们首先得知道目前系统运行的值是什么,而后相应的根据相关参数进行调优。html

1.-XX:+PrintFlagsInitial(查看初始值) 2.-XX:+PrinFlagsFinal(查看最终值) 3.-XX:+UnlockExperimentalVMOptions(解锁实验参数) 4.-XX:+UnlockDiagnosticVMOptions(解锁诊断参数) 5.-XX:+PrintCommandLineFlags(打印命令行参数)java

PrinFlagsFinal

示例一

bool类型 属性名:UseG1GC 值:false 所以能够看出,并无使用G1GC。git

示例二

InitialHeapSize := 130023424 表示初始堆的值大小。github

注意: =表示默认值 :=被用户或者JVM修改后的值tomcat

演示一下

演示

能够看到有很是多的参数。有兴趣的小伙伴能够本身试试。微信

那么刚才咱们看到的参数是哪一个进程的呢? 答案是:经过执行java -XX:+PrinFlagsFinal -version这个命令时的进程参数值。oracle

若是咱们要查看一个在运行时的JVM参数值,那么如何查看呢?这就是咱们后面讲到的jinfo,在此以前,咱们先来看一下·jps·。学习

jps

jps它就相似于Linux系统中的ps,也是用来查看系统进程的。不过它是专门用来查看java的进程。接下来咱们来简单演示一下jps的使用spa

如何使用?

jps使用

更多jps的适用参数命令,能够去这里查看 命令行

jps的命令使用地址

jinfo

那么咱们如何去查看一个正在运行的JVM的参数值呢? 那么用jinfo就能够了。

jinfo使用

再例如,咱们如何查看tomcat的最大内存值是多少?那么咱们首先得知道命令,而后找到对应的pid。

jinfo使用举例

如图,其中23789就是tomcat的进程pid,查看对内存大小命令:MaxHeapSize。 能够看到最大堆内存大小为268435456

jinfo使用举例2

能够看到咱们手动赋值的参数,也能够看到默认有的参数值。

  • 查看最大内存

查看最大内存

  • 查看垃圾回收器

查看垃圾回收器

jstat查看JVM统计信息

  • 类装载
  • 垃圾收集
  • JIT编译

垃圾回收这块很是有用,由于咱们可以很是清楚的看到内存结构里面每一块的大小是如何进行变化的。

命令格式

命令格式

options:-class,-compiler,-gc,-printcompilation

咱们来查看一下jstat文档。

jstat文档

咱们来介绍一下几个命令。

类装载

类装载命令演示

jstat -class 3176 1000 10

后面的1000表示每隔1000ms,10表示一共输出10次

咱们来看一下文档中是如何介绍-class命令。

-class命令

分别表示什么含义呢?

  • Loaded:类装载的个数
  • Bytes:装载的kBs数
  • Unloaded:卸载的个数
  • Bytes:卸载的kBs数
  • Time:所花费的装载和卸载的时间

垃圾收集

命令:-gc、-gcutil、-gccause、-gcnew、-gcold

垃圾收集

输入:jstat -gc 3176 1000 3

一样,后面表示每隔1000ms,一共打印输出3次

咱们一样来看一下文档中的-gc的命令

-gc命令

咱们来总结一下-gc输出结果。

  • S0C、S1C、S0U、S1U:S0和S1的总量与使用量
  • EC、EU:Eden区总量与使用量
  • OC、OU:Old区总量与使用量
  • MC、MU:Metaspace区总量与使用量
  • CCSC、CCSU:压缩类空间总量与使用量
  • YGC、YGCT:YoungGC的次数与时间
  • FGC、FGCT:FullGC的次数与时间
  • GCT:总的GC时间

JIT编译

命令:-compiler、-printcompilation

咱们来演示一下JIT编译。

JIT编译演示

这些都表示什么含义呢?咱们来看一下咱们的文档。

JIT命令文档

  • Compiled:表示完成了多少个编译任务
  • Failed:表示失败的编译任务个数
  • Invalid:表示无效的编译任务
  • Time:执行编译任务所花的时间。
  • FailedType:上次失败编译的编译类型。
  • FailedMethod:上次编译失败的类名和方法。

小伙伴能够结合一下上方的演示图案,来理解一下是什么含义。

你们了解一下就能够,实际工做中做用并非很大。

以上都是以JDK1.8进行介绍。这里小伙伴们先简单了解一下这一块,后续再详细介绍。小伙伴们能够本身在电脑上尝试一下使用命令,观察一下打印结果。 关于JVM参数的命令,在文档中还有更多的详细介绍。感兴趣的小伙伴,能够自行去查看。 传送门:docs.oracle.com/javase/8/do…

下一章,咱们未来学习一下JVM的内存结构以及内存溢出。感兴趣的小伙伴,能够关注一下~

推荐

文末

文章收录至 Github: github.com/CoderMerlin… Gitee: gitee.com/573059382/c… 欢迎关注并star~

微信公众号
相关文章
相关标签/搜索