来源 | 悟空聊架构(ID:PassJava666)

本实验的目的是讲解 JVM 的三大参数类型。在JVM调优中用到的最多的 XX 参数,而如何去查看和设置 JVM 的 XX 参数也是调优的基本功,本节以实验的方式讲解 JVM 参数的查看和设置。希望大家能有所启发。

标配参数

常见标配参数

  • -version,获取JDK版本

  • -help,获取帮助

  • -showverision,获取JDK版本和帮助

动手实验 1 - 查看标配参数

实验步骤:

  • 查看Java JDK 版本

java -version

实验 1-1

可以看到Java JDK 版本为1.8.0_131

  • 查看 Java 帮助文档

java -help

实验 1-2
  • 查看版本和帮助文档

java -showversion

实验 1-3

X 参数

X 参数简介

我们常用的javac大家都知道是把java代码编译成 class 文 Java 文件,那么 class 文件怎么去执行呢?这里用到了三个X参数来说明 class 文件怎么在虚拟机里面跑起来的。

  • -Xint:直接解释执行

  • -Xcomp:先编译成本地代码再执行

  • -XMixed:混合模式(既有编译执行也有解释执行)

动手实验 2 - 查看和配置X参数

  • 查看版本

java -version

在WebIDE的控制台窗口执行Java -version 后,可以看到我的环境是混合模式执行java程序的。

实验 2-1
  • 修改编译模式为解释执行模式

java -Xint -version

在WebIDE的控制台窗口执行命令

实验 2-2
  • 修改编译模式为只编译模式

java -Xcomp -version

实验 2-3

XX 参数

XX  参数简介

XX 参数有两种类型,一种是 Boolean 类型,另外一种是键值对类型。

  • Boolean 类型

    • 公式:-XX:+某个属性 或者,-XX:-某个属性 +表示开启了这个属性,-表示关闭了这个属性。

    • 案例:-XX:-PrintGCDetails,表示关闭了GC详情输出

  • key-value类型

    • 公式:-XX:属性key=属性value

    • 案例:-XX:属性metaspace=2000000,设置Java元空间的值为2000000。

动手实验 3 - 查看参数是否开启

本实验主要讲解如下内容:查看运行的 Java 程序 PrintGCDetails 参数是否开启

  • 编写一个一直运行的 Java 程序

  • 查看该应用程序的进程 id

  • 查看该进程的 GCDetail 参数是否开启

在 WebIDE 上右键单击菜单,选择 New File 创建新文件

New File

创建文件名为 demoXXparam.java

demoXXparam.java

在 WebIDE 上编写 demoXXparam.java

public class demoXXparam {public static void main(String[] args) throws InterruptedException {System.out.println("hello XX params");Thread.sleep(Integer.MAX_VALUE);}
}

在 WebIDE 的控制台窗口编译 demoXXparam.java 代码

javac demoXXparam.java

编译代码

编译之后,会在当前文件夹产生我们所编写的  demoXXparam 类的 demoXXparam.class 字节码文件

生产Class文件

在 WebIDE 上运行 demoXXparam 代码

java demoXXparam

运行Java程序

输出:

hello XX params

在 WebIDE 中新开一个控制台窗口

Terminal->New Terminal

开启新控制台窗口

查看所有的运行的java程序,-l 表示打印出class文件的包名

jps -l

jps

发现demoXXparam进程的id为 518

查看 demoXXparam 程序是否开启了PrintGCDetails这个参数

PrintGCDetails:  在发生垃圾回收时打印内存回收日志,并在进程退出时输出当前内存各区域分配情况

jinfo -flag PrintGCDetails 518

jinfo

结果如下:

-XX:-PrintGCDetails

上面提到  -号表示关闭,所以当前 demo 程序没有开启 PrintGCDetails参数。

动手实验 4  - 开启参数

  • 在 WebIDE 控制台强制退出demoXXparam程序

ctrl + c
  • 然后清理屏幕

clear
  • 然后以参数 -XX:+PrintGCDetails 运行 demoXXparam 程序

java -XX:+PrintGCDetails demoXXparam

实验 4
  • 输出:

hello XX params

查看demoXXparam进程的 id

进程 id

可以看到demoXXparam进程 id 为 1225

查看 demoXXparam 的配置参数 PrintGCDetails

打开一个新的控制台窗口,执行以下命令来查看进程为 1225 的 PrintGCDetails参数是否开启

jinfo -flag PrintGCDetails 1225

PrintGCDetails 参数

可以看到PrintGCDetails是开启的,+号表示开启。

动手实验 5 - Key-Value 类型参数值

查看元空间的值

jinfo -flag MetaspaceSize 526

MetaspaceSize 大小

由此可以得出元空间的大小为 21 M。

设置元空间的值为 128 M

java -XX:MetaspaceSize=128m demoXXparam

查看元空间的大小

    jinfo -flag MetaspaceSize 1062

调整元空间大小

最常见的 -Xms 和 -Xmx 属于哪种参数?

  • -Xms参数代表-XX:InitialHeapSize ,初始化堆内存(默认只会用最大物理内存的64分1)

  • -Xmx:参数代表-XX:MaxHeapSize ,大堆内存(默认只会用最大物理内存的4分1)

起了别名,但还是属于XX参数。

动手实验 6 - 设置 -XX:InitialHeapSize 和 -XX:MaxHeapSize 的值。

java -XX:InitialHeapSize=200m demoXXparam
或者
java -Xms200m demoXXparam

查看 InitialHeapSize 参数的值,大小为 200 M。

设置 InitialHeapSize
java -XX:MaxHeapSize=200M demoXXparam
或者
java -Xmx200m demoXXparam

查看 MaxHeapSize 参数的值,大小为 200 M。

设置 MaxHeapSize

扩展:查看 Java 程序已设置的所有参数值

jinfo -flags <进程id>

mark
  • Non-Defalut VM flags 代表参数类型是JVM自带的参数。

  • Command line 代表是用户自定义的参数

如何查看出厂设置和自定义设置的XX配置项

动手实验 7 - 查看出厂默认设置的所有XX配置项

java -XX:+PrintFlagsInitial -version

PrintFlagsInitial

动手实验 8 - 查看 JVM 当前所有XX配置项

java -XX:+PrintFlagsFinal -version

PrintFlagsFinal

我们可以看到几个关键信息:

  • [Global flags]:全局参数,如果自定义修改了某个应用的参数,并不会修改全局参数

    比如之前我们修改了MetaspaceSize为128m,但列表里面还是21m。

Global flags
  • :=:参数已被修改,如下图所示InitialHeapSize初始化堆内存参数已修改为264241152

    总结如下:

出厂设置和自定义参数设置

动手实验 9 - 运行程序时打印XX配置选项

java -XX:+PrintFlagsFinal -XX:+InitialHeapSize=150M demoXXparam

可以看到修改后的值为 157286400(150 M)

运行程序时打印XX配置选项

动手实验 10 - 查看 JVM 自动配置的或者用户手动设置的XX选项(非应用程序的)

java -XX:+PrintCommandLineFlags -version

会打印出如下参数:

JVM 自动配置的XX选项

实验总结

本节实验课学习了如何查看基本参数、X参数、XX参数和设置XX参数。以及用好jps和jinfo工具来查看进程和设置参数。

JVM性能调优还有很多要讲的,一篇是讲不完的,我会分成几篇来为大家讲述,形式主要以小实验的方式来为大家讲解。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

秒懂JVM的三大参数类型,就靠这十个小实验了相关推荐

  1. 如何开启jvm日志_做了10个小实验:搞懂了JVM三大参数类型

    本实验的目的是讲解 JVM 的三大参数类型.在JVM调优中用到的最多的 XX 参数,而如何去查看和设置 JVM 的 XX 参数也是调优的基本功,本节以实验的方式讲解 JVM 参数的查看和设置.希望大家 ...

  2. JVM参数类型大揭秘

    文章目录 JVM参数类型大揭秘 JVM的参数类型 标准参数 X参数 XX参数 -Xmx -Xms 运行时JVM参数查看 参数: jps jinfo jstat查看虚拟机统计信息 类装载 垃圾收集 JI ...

  3. JVM调优系列:(五)JVM常用调试参数和工具

    转自:http://blog.csdn.net/opensure/article/details/46715769 JVM常用调试参数: –verbose:gc在虚拟机发生内存回收时在输出设备显示信息 ...

  4. 【JVM调优】JVM的运行参数

    在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能高效的运行,绝大部分的参数保持默认即可 三种参数类型 jvm的参数类型分为三类,分别是 * 标准参数* -help* -versio ...

  5. JVM之XX参数详解

    JVM的XX参数详解 目录 标准参数 X参数(了解) XX参数(重点) -Xms,-Xmx是X参数还是XX参数,如何解释? 1. 标准参数 指每个版本都不会大发生改变的参数 测试命令: 2. X参数( ...

  6. 图解JVM内存三大核心区域及其JVM内存案例实战剖析

    2019独角兽企业重金招聘Python工程师标准>>> 1 图解JVM内存三大核心区域 2 JVM内存使用案例剖析 public class HelloJVM {/*** JVM 运 ...

  7. 查看jvm的运行参数

    查看jvm的运行参数 有些时候我们需要查看jvm的运行参数,这个需求可能会存在2种情况: 第一,运行java命令时打印出运行参数: 第二,查看正在运行的java进程的参数: 运行java命令时打印参数 ...

  8. JVM内存配置参数、GC工作原理及Minor GC、FullGC

    对于JVM内存配置参数: -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 -Xms10240m 初始堆大小即最小内存值 XXSurvivorRat ...

  9. JVM常用内存参数配置

    一.    常用参数 -Xms JVM启动时申请的初始Heap值,默认为操作系统物理内存的1/64但小于1G.默认当空余堆内存大于70%时,JVM会减小heap的大小到-Xms指定的大小,可通过-XX ...

最新文章

  1. LeetCode实战:回文数
  2. redis设置键的生存时间或过期时间
  3. 判断选择语句switch...case
  4. C语言实现面向接口编程
  5. 开源中国android代码是什么,开源中国 OsChina Android 客户端源码分析(1)启动界面 app_start...
  6. java String类常用的方法
  7. python读什么文件最快的软件_这些方法,能够让你的 Python 程序快如闪电
  8. Android 获取唯一机器码的代码
  9. 图像目标检测识别,计算物体个数,针对电子元器件计算
  10. 相对路径和绝对路径及表示
  11. E. Easy Measurements(解不定方程)
  12. 第12章实验1:学生成绩管理系统V5.0(c语言)
  13. 八、服务器【Ubuntu】GPU-TeslaP100部署
  14. LOAM论文和程序代码的解读
  15. if中return语句作用/条件判断中如何退出函数
  16. android5.1官方下载,vllo官方下载
  17. SharePoint 2007 制作值班表
  18. Python之路 33:进程与线程概念及基础使用
  19. exe程序嵌入Winform窗体
  20. Linux 内核模块及系统监控

热门文章

  1. mqtt 传文件断开连接的原因_mqtt 发送消息断开链接
  2. 关于学习Python的一点学习总结(23->跳出循环)
  3. 图论 ---- Tajran找割点 牛客多校2021 J Defend Your Country
  4. 计算机控制系统在农业上的应用研究,智能控制仪表系统在农业电气自动化中的应用研究...
  5. BZOJ 2157 「国家集训队」旅游(树链剖分,线段树,边权转点权)【BZOJ计划】
  6. 二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)
  7. smack连接openfire
  8. python用渐变色画圆_利用python控制Autocad:pyautocad方式
  9. 吐血推荐:win下如何安装tensorflow?只需两步!!
  10. java detach_线程 (detach的作用)